История создания и текущий статус стандарта POSIX
Обеспечение мобильности (переносимости, портабельности) программного обеспечения
(ПО) - задача исключительной важности и сложности; в наше время это обстоятельство
едва ли нуждается в пространных обоснованиях. Один из общепринятых способов повышения мобильности ПО - стандартизация
окружения приложений: предоставляемых программных интерфейсов, утилит
и т.п. На уровне системных сервисов
подобное окружение описывает стандарт POSIX
(Portable Operating System Interface - мобильный интерфейс операционной системы);
название предложено известным специалистом, основателем Фонда свободного программного
обеспечения Ричардом Столмэном.
Мы будем рассматривать наиболее современную из доступных версий стандарта POSIX,
в редакции 2003 г., которую можно назвать "стандартом втройне", а именно: стандартом
IEEE Std 1003.1, Техническим стандартом Open Group и (см. [6]),
что для нас важнее всего, международным стандартом ISO/IEC 9945 (см. [1],
[2], [3], [4]).
История создания этой версии такова. В начале 1998 г. представители трех организаций -
Комитета по стандартам мобильных приложений Института инженеров по электротехнике и электронике,
Open Group и рабочей группы 15 подкомитета 22 совместного технического комитета 1
(JTC1/SC22/WG15) Международной организации по стандартизации - начали консультации по
вопросу слияния и развития курируемых ими стандартов интерфейсов к системным сервисам:
IEEE Std 1003.1, IEEE Std 1003.2, Базовых спецификаций от Open Group, ISO/IEC 9945-1,
ISO/IEC 9945-2. В сентябре того же года в городе Остин, штат Техас, в офисе корпорации
IBM состоялось организационное заседание группы, сформированной для достижения
поставленной цели (см. http://www.opengroup.org/austin).
Основополагающим документом для пересмотренного стандарта, первый проект которого был
представлен в июле 1999 года, стали Базовые спецификации от Open Group, поскольку они
включали положения стандартов IEEE и ISO/IEC. В 2001 году, по завершении подготовительной
работы, стандарт содержал следующие четыре части:
- основные определения (термины, концепции и интерфейсы, общие для всех частей);
- описание прикладного программного C-интерфейса к системным сервисам;
- описание интерфейса к системным сервисам на уровне командного языка и служебных
программ ;
- детальное разъяснение положений стандарта, обоснование принятых решений.
Далее в ISO, IEEE и Open Group с большей или меньшей скоростью (в 2001-2002 гг.) прошло
формальное утверждение нового стандарта POSIX. Тем временем накапливались относительно
мелкие исправления, учтенные в редакции 2003-го года.
С развитием стандарта расширялась и трактовка термина "POSIX". Первоначально он относился
к документу IEEE Std 1003.1-1988, описывавшему прикладной программный интерфейс ОС класса Unix. После стандартизации
интерфейса на уровне командного языка и служебных программ более правильно понимать под
словом "POSIX" стандарт в целом, обозначая перечисленные выше части 2 и 3 через POSIX.1 и
POSIX.2 в соответствии с нумерацией документов IEEE и ISO/IEC.
Основные идеи стандарта POSIX
Стандарт POSIX описывает множество базовых, системных сервисов, необходимых для функционирования
прикладных программ. Доступ к ним предоставляется посредством интерфейса, специфицированного
для языка C, командного языка и общеупотребительных служебных программ.
У каждого интерфейса есть две стороны: вызывающая и вызываемая. Стандарт POSIX ориентирован
в первую очередь на вызывающую. Его цель - сделать приложения мобильными на уровне исходного языка. Это значит,
в частности, что при переносе C-программ на другую операционную платформу потребуется
перекомпиляция. О мобильности выполнимых программ и/или объектных файлов речь не идет.
Стандарт POSIX отнюдь не ограничен рамками Unix-среды. Существуют операционные системы
(ОС) "независимого происхождения" (например, системы
реального времени ), предоставляющие необходимые сервисы и тем самым поддерживающие выполнение POSIX-совместимых приложений. Можно утверждать, что следование стандарту POSIX
облегчает перенос приложений практически на любую сколько-нибудь распространенную операционную
платформу. Дополнительные усилия по повышению мобильности, прилагаемые на этапе разработки,
безусловно, окупятся.
Определяя интерфейс к системным сервисам, POSIX оставляет за рамками рассмотрения их
реализацию. В частности, не различаются системные
вызовы и библиотечные функции.
Не являются объектом стандартизации средства администрирования, аппаратные ограничения и функции, необходимые
только суперпользователю, что еще
раз подчеркивает направленность стандарта POSIX на приложения, а не на операционные системы.
POSIX нейтрален по отношению к системной архитектуре и разрядности процессора. Это очень
важный аспект мобильности приложений.
Ориентация на международный стандарт языка C определила не только стиль описания функций,
но и, до некоторой степени, направление развития спецификаций POSIX в плане синхронизации
обоих стандартов. Как известно в утвержденной в 1999 г. редакции спецификаций языка C (см.
[5]) узаконен комплексный тип данных, что вызвало соответствующее
пополнение POSIX-функций.
В стандарте POSIX проведено разделение на обязательные и дополнительные функции, причем
обязательное ядро сделано по возможности компактным. Разумеется, особое внимание уделяется
способам реализации стандартизуемых функций как в "классической" Unix-среде, так и на других
операционных платформах, в сетевых и распределенных конфигурациях.
Разработчики новой версии стандарта POSIX очень бережно отнеслись и к его предыстории,
и к предыстории Unix-систем, и, главное, к приложениям, удовлетворявшим более ранним версиям
стандарта. Существующие интерфейсы старались сохранять; в процессе развития соблюдался
принцип обратной совместимости ;
новые интерфейсы добавлялись так, чтобы они не конфликтовали со старыми. Полностью избежать
внесения изменений в приложения не удалось по вполне понятным причинам: потребовалось
устранить противоречия между разными исходными спецификациями, а также отказаться от
поддержки "традиционного" варианта языка C и перейти на его международный стандарт.