POSIX-совместимая ОС обычно расширяет существующую реализацию стандартной библиотеки C?
POSIX_C_LANG_SUPPORT - это одна из функциональных единиц, которую POSIX заявляет, что операционная система должна обеспечивать совместимость с POSIX. По сути, это целая стандартная библиотека C с некоторыми другими вещами.
Мой вопрос прост: разработчики POSIX-совместимых ОС обычно просто скачивают версию стандартной библиотеки C с открытым исходным кодом (например, glib или uClibc) и адаптируют ее под POSIX, или они реализуют все с нуля? Есть ли какое-то преимущество в переписывании библиотеки C вместо того, чтобы просто выбрать одну из очень известных реализаций и настроить ее в соответствии с моими потребностями?
2 ответа
На самом деле, это сделано в обратном порядке.
У нас разные версии Unix: два основных семейства: SystemV и BSD, разные производители, и поэтому возникла необходимость в стандартизации. Правительство США хотело также стандартизированных программ, поэтому POSIX (версия 1) была создана путем стандартизации интерфейсов ОС (шаг дальше, чем просто стандарт C).
Windows NT также совместима с POSIX (версия 1) только потому, что правительству нужны стандартизированные инструменты. Так что POSIX был разработан очень, очень широкий.
Затем со временем потребовалось стандартизировать еще несколько Unix (и подобных) систем. Не только одна система, один API, но и общий API, и поэтому программы (например, библиотеки GUI или базы данных) могут в конечном итоге использовать расширение, но также должны убедиться, что программа, соответствующая стандарту, работает на совместимой системе.
Это была SUS (Single Unix Specification). Это требовало UNIX-подобной системы (в отличие от POSIX 1).
Тогда POSIX стал не таким важным: приложение, которое теоретически могло работать на всех системах POSIX, на самом деле не работало на POSIX Windows.
Таким образом, новая версия POSIX объединила старый POSIX плюс SUS плюс новую полезную функцию, отсутствующую в SUS.
Теперь Linux важен, поэтому при обновлении POSIX учитывается реализация Linux (например, glibc). В списке рассылки вы увидите, что POSIX определяется "продавцами" различных Unix и подобных систем.
Таким образом, дело не в том, что операционные системы расширяют POSIX, а в том, что POSIX использует самые полезные и стандартные опции для разных ОС. Он создает новые интерфейсы только тогда, когда существующие интерфейсы настолько несовместимы, что при стандартизации он разрушит существующие программы.
На "второй" вопрос: когда вы разрабатываете новую операционную систему, вы выбираете, какой путь выбрать. Обычно это просто деривация и разветвление (и дистрибутивы): опять же из двух семейств Unix, просто производные Linux от RedHat или Debian). Иногда система строится с нуля, из-за дизайна. Ядро обеспечивает большинство системных вызовов, поэтому, например, glibc требует много системных вызовов (предоставляемых ядром), реализованных аналогично POSIX. Глибц не полный. Примечание: в ранних дистрибутивах Linux использовались другие библиотеки. GLibc также был написан с нуля.
Ну, мы все гномы, стоящие на плечах гигантов.
Написание новой ОС - огромная задача, поэтому мудрый будет повторно использовать все, что может (дизайн, библиотеки, компиляторы, другое программное обеспечение). Скорее всего, это слишком много работы, так зачем делать это еще сложнее, переписывая все с нуля?