Переносимость программного обеспечения - Software portability

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

Стратегии переносимости

Переносимость программного обеспечения может включать:

  • Перенос установленных программных файлов на другой компьютер с той же архитектурой.
  • Переустановка программы из файлов дистрибутива на другой компьютер с той же архитектурой.
  • Сборка исполняемых программ для разных платформ из исходного кода ; это то, что обычно понимается под « портированием ».

Подобные системы

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

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

В некоторых случаях программное обеспечение, обычно описываемое как « портативное программное обеспечение », специально предназначено для работы на разных компьютерах с совместимыми операционными системами и процессорами без какой-либо машинно-зависимой установки. Перенос - это не более чем перенос указанных каталогов и их содержимого. Программное обеспечение, установленное на портативных запоминающих устройствах, таких как USB-накопители, можно использовать на любом совместимом компьютере, просто подключив запоминающее устройство, и сохраняет всю информацию о конфигурации на съемном устройстве. Информация об оборудовании и программном обеспечении часто хранится в файлах конфигурации в определенных местах (например, в реестре на машинах под управлением Microsoft Windows ).

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

Разные процессоры

По состоянию на 2011 год в большинстве настольных и портативных компьютеров использовались микропроцессоры, совместимые с 32- и 64-разрядными наборами инструкций x86 . В портативных устройствах меньшего размера используются процессоры с разными и несовместимыми наборами команд, например ARM . Разница между большими и меньшими устройствами такова, что подробные операции программного обеспечения различаются; приложение, предназначенное для отображения на большом экране, не может быть просто перенесено на смартфон карманного размера с крошечным экраном, даже если функциональные возможности аналогичны.

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

Переносимость исходного кода

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

В средах с открытым исходным кодом, таких как Linux, исходный код доступен всем. Раньше исходный код часто распространялся в стандартизированном формате и мог быть встроен в исполняемый код с помощью стандартного инструмента Make для любой конкретной системы умеренно осведомленными пользователями, если во время сборки не возникало ошибок. Некоторые дистрибутивы Linux распространяют программное обеспечение среди пользователей в исходной форме. В этих случаях обычно нет необходимости в детальной адаптации программного обеспечения к системе; он распространяется таким образом, который изменяет процесс компиляции в соответствии с системой .

Усилия по переносу исходного кода

Даже с такими, казалось бы, переносимыми языками, как C и C ++, усилия по переносу исходного кода могут значительно различаться. Авторы UNIX / 32V (1979) сообщили, что «[t] он (Bourne) shell [...] потребовал наибольших усилий по преобразованию из любой предположительно переносимой программы по той простой причине, что он не переносится».

Иногда усилия заключаются в перекомпиляции исходного кода, но иногда необходимо переписать основные части программного обеспечения. Многие спецификации языка описывают поведение, определяемое реализацией (например, сдвиг вправо целого числа со знаком в C может выполнять логический или арифметический сдвиг). Функции операционной системы или сторонние библиотеки могут быть недоступны в целевой системе. Некоторые функции могут быть доступны в целевой системе, но демонстрируют немного другое поведение (например: utime () не работает под Windows с EACCES, когда он вызывается для каталога). Сам программный код также может содержать непереносимые вещи, например пути к включаемым файлам. Буквы дисков и обратная косая черта в качестве разделителя пути принимаются не во всех операционных системах. Реализация определяет такие вещи, как порядок байтов и размер int, также может увеличить усилия по переносу. На практике требование языков, таких как C и C ++ , иметь WOCA ( писать один раз, компилировать где угодно ) является спорным.

Смотрите также

Рекомендации

Источники

  • Муни (1997). «Обеспечение переносимости программного процесса» (PDF) . Университет Западной Вирджинии. Кафедра статистики и информатики. Архивировано из оригинального (PDF) 25 июля 2008 года . Проверено 17 марта 2008 . Цитировать журнал требует |journal= ( помощь )
  • Гарен (2007). «Переносимость программного обеспечения: варианты взвешивания, выбор» . Журнал CPA . 77 (11): 3.
  • Лехи (1995). «Перенос программного обеспечения UNIX: от загрузки до отладки» (PDF) . Проверено 27 мая 2010 . Цитировать журнал требует |journal= ( помощь )