Как делает портирование между работой Linux и Windows?

Если конкретная часть программного обеспечения сделана быть выполненной на одной платформе, и programmer/company/whatever хочет портировать его на другой, что точно сделано? Я имею в виду, они просто переписывают Linux или определенные для окон ссылки на эквивалент в другом? Или все, переписывают необходимый?

Просто пытаясь понять, что делает его столь препятствующим стоимости, что столько крупных поставщиков не портирует свое программное обеспечение на Linux (конкретно думающий о Adobe)

Спасибо

6
задан Kefka 18 April 2010 в 22:31
поделиться

6 ответов

это суть кроссплатформенного инструментария вроде qt или gtk, они предоставляют платформенно-независимый API, который делегирует ту платформу, для которой скомпилирована программа.

некоторые компании не используют такой инструментарий и пишут свои собственные (по какой-то причине - вполне могут быть связаны с оптимизацией), то есть они не могут просто перекомпилировать свой код для другой ОС.

4
ответ дан 9 December 2019 в 22:31
поделиться

По моему опыту, есть три основные причины, по которым слишком дорого переносить большую существующую программу на одной платформе и переносить ее на другую:

  1. он (не обязательно намеренно) широко использовал некоторую библиотеку или API (часто GUI, но есть и множество других вещей), которые, как оказалось, не существуют на другой платформе

  2. , он неосознанно стал пронизан зависимостью от нестандартных функций или странности компилятора или других инструментов

  3. он был написан кем-то, кто не знал, что у вас было , чтобы использовать какую-то странную функцию, чтобы заставить что-то работать на другой платформе (например, библиотека Linux, которая не без правильных директив __ declspec , необходимых для хорошей Windows DLL).

Гораздо проще написать кроссплатформенное приложение, если вы с самого начала считаете это целью дизайна, и у меня есть три конкретных рекомендации:

  • Используйте Boost - множество полезных вещей, которые вы обычно можете получить из API-интерфейсов для конкретных платформ. и библиотеки, но, используя Boost, вы получаете кроссплатформенность.

  • Выполняйте программирование графического интерфейса пользователя с помощью кросс-платформенной библиотеки. Сейчас мне больше всего нравится Qt, но есть и другие достойные.

  • Создавайте и тестируйте каждый день на обеих платформах, никогда не давайте коду возможности развить зависимость только от одной платформы и обнаружить это слишком поздно.

2
ответ дан 9 December 2019 в 22:31
поделиться

Большая часть программного обеспечения в той или иной степени переносима. В случае приложения C - в этой области будет много #ifdef, не считая изменения пути и т. Д.

Редко версии одного и того же программного обеспечения для Windows / Linux не имеют общей кодовой базы - это фактически означают, что у них есть только общее имя. Всегда труднее поддерживать больше кодовых баз, но я думаю, что реальная проблема с переносом приложений имеет мало общего с технической стороной, а во многом с деловой стороной. У Linux гораздо меньше пользователей, чем у Windows / OSX, большинство из них ожидают, что все будет бесплатно, как в пиве, или просто ненавидят коммерческое программное обеспечение по каким-то религиозным причинам.

Если задуматься, большая часть программного обеспечения с открытым исходным кодом является мультиплатформенным, независимо от того, на каком языке оно было реализовано. Это говорит само за себя ...

P.S. Заявление об ограничении ответственности - я заядлый сторонник бесплатного программного обеспечения с открытым исходным кодом, я не хочу никого оскорблять - я просто делюсь своим взглядом на эту тему.

0
ответ дан 9 December 2019 в 22:31
поделиться

Если программное обеспечение было написано для одной ОС, вероятно, что оно будет серьезно переработано. Первый шаг - переместить абсолютно весь программно-зависимый код в единую область кодовой базы; в этой области должно быть мало материалов, относящихся к конкретному приложению, или вообще не должно быть. Затем перепишите эту изолированную часть кода для новой целевой ОС.

Конечно, это приукрашивает некоторые чрезвычайно важные последствия. Например, если ваша первая версия была нацелена на Win32 API, то любой код графического интерфейса будет сильно привязан к Windows, и чтобы сохранить любую надежду на сохранение вашего рассудка, вам нужно будет переместить весь этот код в кроссплатформенную структуру графического интерфейса, такую ​​как Qt. или GTK.

0
ответ дан 9 December 2019 в 22:31
поделиться

В Mono вы можете написать программу C # Winforms, которая работает на обеих платформах. Но чтобы сделать это возможным, команде Mono пришлось написать собственную библиотеку Winforms, которая по сути дублирует все функции Winforms. Так что бесплатного обеда по-прежнему нет.

0
ответ дан 9 December 2019 в 22:31
поделиться

Перенос программного обеспечения, которое не было сделано заранее независимым от платформы, может быть огромной задачей. Часто код глубоко укоренился в непереносимых API, будь то сторонние библиотеки или просто библиотеки ОС. Если сторонний поставщик не предоставляет API для платформы, на которую вы переносите, вы в значительной степени вынуждены полностью переписать эту функциональность или найти другую стороннюю компанию, которая является переносимой. Только это может быть очень дорого.

Наконец, перенос программного обеспечения также означает поддержку его на другой платформе, что означает наем некоторых специалистов и обучение поддержке для ответа на более сложные запросы.

В конце концов, такой процесс может оказаться очень дорогостоящим и потребовать очень мало дополнительных продаж. К сожалению, решение простое: сконцентрируйтесь на новой функциональности на вашей текущей платформе, за которую, как вы знаете, ваши клиенты будут платить.

1
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: