Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Categories:

диктатура меньшинств (компьютерное)

Ulrich Drepper: Dictatorship of the Minorities

Дреппер работает в RedHat и знаменит в первую очередь поддержкой и разработкой в последние годы glibc - главной C-библиотеки проекта GNU, использующейся в первую очередь в Линуксе.

В этой заметке он пытается убедить open source-разработчиков не поддерживать странные, редкие или коммерческие OS и архитектуры, а поддерживать, по сути дела, только Линукс, да и то лишь несколько основных компьютерных архитектур, на которых бежит Линукс, а не всех.

По этому поводу разгорелся флейм у него в журнале и на Слэшдоте.

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

Как правильно заметили многие из ответивших ему, поддержка проекта для многих OS/архитектур очень часто помогает обнаружить баги/недостатки дизайна, не столь очевидные в случае, если вести его только на одной/двух платформах. Примеры многочисленны и очевидны. 32-битные/64-битные архитектуры. Платформы, на которых int==long, и на которых они различны. OpenBSD славится параноидальным подходом ко всему, включая, например, защиту адресного пространства, так что обращение по испорченному указателю с большей вероятностью повалит программу (и хорошо). Различия в абстрагировании "железа" и том, как уровни абстракции устроены... и так далее, и тому подобное.

Но есть и другие виды межплатформенных различий, которые, при попытке поддерживать проект на разных платформах, вызывают лишь раздражение, а пользы никакой не приносят. Сюда в первую очередь относятся мелкие и тонкие различия в стандартных библиотеках разного рода. Принципиальное несовершенство архитектуры (та же проблема 8.3 в файловых именах или неразличение регистра в них же). Принципиальная маломощность платформы (16-битные платформы те же). Мелкие несовместимости на уровне OS (скажем, различия в семантике сигналов). Отсутствие библиотеки на одной из платформ, в то время как та же библиотека есть на всех остальных (и переноси теперь её сам или калечь свой проект, пытаясь предоставить возможность обходиться без неё). И многое ещё.

Проблема в том, что Дреппер не делает различия между этими двумя источниками проблем, а точнее, все такие проблемы считает ненужной головной болью. Действительно, если писать только под Линукс, под 1-2 главные архитектуры, то их не будет. Правда, все недостатки, которые проблемы первого рода помогают обнаружить, останутся, и многие из них рано или поздно всплывут. Правда, такое поведение аналогично поведению тех, кто пишет только под Windows, и кого Дреппер считает "pure evil". Но такие противоречия в своём манифесте Дреппера не смущают. "I don't care and I certainly won't change my mind on this."

В общем, и на glibc это проливает некоторый свет. glibc - ужасно написанная и скомпонованная библиотека. Просто с точки зрения того, как устроены исходники, как найти нужную функцию и что-то понять/добавить/изменить, как она строится. Если бы она хотя бы поддерживала десятки платформ (как первоначально рассчитывали), эта сложность и запутанность была бы ещё хоть в какой-то мере оправдана. Но, оказывается, под руководством Дреппера всё свелось к поддержке одного лишь Линукса (и частично Хурда), и то не на всех архитектурах. Жалкое зрелище, и не очень понятно, зачем она тогда нужна. Истинно вам говорю, тот, кто видел и копался в исходниках libc под FreeBSD и под Линуксом - не задумываясь ни на секунду, выберет BSDшную библиотеку.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 11 comments