Информация о версии UNIX 03 соответствия

Содержание:

Введение

Чтобы увеличить совместимость с другими операционными системами UNIX, Apple приложил значительное усилие в OS X v.10.5 для поддержки Единственной Версии 3 (SUSv3) Спецификации UNIX. Несмотря на то, что Apple попытался минимизировать влияние включенных изменений, некоторые из них будут влиять на разработчиков, работающих с UNIX APIs и команды.

Ядро OS X, библиотеки и утилиты нарисованы из многих проектов С открытым исходным кодом, включая FreeBSD, GNU, NetBSD и OpenBSD. Несмотря на то, что эти проекты прилагают усилие для следования за промышленными стандартами, ни один из них не имеет ресурсы для привлечения в формальном процессе сертификации.

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

Несмотря на то, что Apple попытался сделать процесс максимально бесшовным, некоторые изменения соответствия являются просто несовместимыми с командами и APIs, найденным на более ранних версиях OS X. Этот документ обеспечивает обзор этих несовместимостей, вместе с информацией об определенных изменениях, которые, вероятно, будут проблематичны.

Соответствие и устаревшее поведение

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

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

В относительно небольшое количество случаев, совместимых интерфейсов или поведения фактически конфликтует с найденным в предыдущих (устаревших) версиях OS X. Как обсуждено в compat(5) страница руководства, OS X v.10.5 обеспечивает способы приблизить устаревшее поведение. Несмотря на то, что это не гарантирует, что текущие программы будут «Просто Работать», это должно минимизировать число кодирования изменений.

Типы проблем совместимости

Существующие скомпилированные приложения не должны встречаться с проблемами в перемещении в OS X v.10.5. Если системный вызов или библиотечная функция, как будет известно, будут иметь новое поведение, то новая версия будет только использоваться с программами, скомпилированными для использования на OS X v.10.5. Существующая исполнимая программа не будет «видеть» эти версии и таким образом не будет затронута изменениями.

Если приложение будет перекомпилировано для использования на OS X v.10.5, то это получит новые версии библиотек и системных вызовов, если устаревшая цель не будет указана (См. проблемы Выполнения, ниже).Some сценарии, такие как удар и perl сценарии, может также встретиться с проблемами с командами, опции которых и/или поведение изменил. Возможно запросить устаревшее поведение путем установки переменной окружения COMMAND_MODE к значению»legacy".

Компилируйте/Соединяйте Проблемы

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

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

#define _NONSTD_SOURCE

будет часто позволять устаревшим версиям использоваться. Снова, посмотрите compat(5) страница руководства для подробных данных.

Следующие страницы руководства в настоящее время имеют LEGACY SYNOPSIS разделы:

Проблемы использования команды

Если опции и/или поведение команды изменились значительно, один или больше LEGACY разделы должны задокументировать этот факт. Однако эти разделы все еще очень «происходят» в это время.

Следующие команды реагируют на переменную окружения COMMAND_MODE, как обсуждено в compat(5):

Проблемы выполнения

SUSv3 требует многих проверок на ошибки, которые ядро OS X не сделало в прошлом. В результате с неожиданными значениями errno можно встретиться. Поскольку определенная причина (ы) большинства этих значений еще не была задокументирована в страницы соответствующего руководства, Ваш лучший ресурс intro(2) страница руководства, предоставляющая общие объяснения значений errno.

Несмотря на то, что некоторые вызовы языка C теперь проверяют на состояния ошибки, что не сделали под OS X v.10.4, команды и приложения, скомпилированные для более ранних выпусков OS X (например, OS X v.10.4, OS X v.10.3), не будут затронуты. Изменения вступают в силу, только если программы перекомпилированы на OS X v10.5 (или больше) с целью развертывания OS X v10.5 (или больше).

Цель развертывания может быть поставлена по крайней мере двумя способами. Один путь состоит в том, чтобы установить переменную окружения. Например, в bash(1), это было бы похоже на это:

export MACOSX_DEPLOYMENT_TARGET=10.5   # Build for use on OS X v.10.5
export MACOSX_DEPLOYMENT_TARGET=10.4   # Build for use on OS X v.10.4
export MACOSX_DEPLOYMENT_TARGET=10.3   # Build for use on OS X v.10.3

Также цель может быть передана компилятору как параметр командной строки, как показано сюда:

gcc -mmacosx-version-min=10.5 ...      # Build for use on OS X v.10.5
gcc -mmacosx-version-min=10.4 ...      # Build for use on OS X v.10.4
gcc -mmacosx-version-min=10.3 ...      # Build for use on OS X v.10.3