Джей Михельсон, Дэвид Браунли. BSD или Linux: Какой Unix лучше для встраиваемых систем? ДекларацияПП1 Wasabi Systems, 2003

I. Введение

С прорывом Linux на рынки серверов и настольных систем производители оригинальных устройств стали рассматривать эту операционную систему в качестве подходящего варианта для использования во встраиваемых системах. Несколько производителей создали собственные дистрибутивы Linux, предназначенные для встраиваемых систем, и поскольку они имеют определённый успех, производители оригинальных устройств могут рассматривать варианты операционных систем типа Unix для использования в передовых устройствах. Однако в этой белой бумаге обсуждаются причины, по которым Linux является менее оптимальным вариантом Unix для использования во встраиваемых системах.

Эти причины делятся на две большие категории: лицензионные и технические. С коммерческой точки зрения Linux имеет серьёзные лицензионные ограничения, которые требуют чтобы все изменения в ядре Linux (а также в некоторых других модулях операционной системы) имели открытый исходный текст. Хотя это лицензионное требование не имеет большого значения для настольных и серверных систем, в ядро которых редко вносят изменения, оно имеет критическое значение для встраиваемых систем, где модификация ядра является одним из вложений производителя оригинального устройства в операционную систему.

С технической точки зрения Linux обладает менее удобными инструментами разработки с одной стороны и недостаточно адекватным слоем абстракции от оборудования с другой.

Там, где Linux - единственная операционная система типа Unix, у производителей оригинального оборудования остаются причины остановить выбор на всё более устаревающей операционной системе VxWorks и неуклюжей Windows. Однако одновременно с экспансией FreeBSD на серверы (компания Yahoo! недавно выбрала эту операционную систему для своего сайта Hotjobs) операционная система NetBSD расширяет своё проникновение во встраиваемые системы. NetBSD недостаёт поддержки прикладных программ FreeBSD и Linux, поэтому она не имеет большой доли на серверах и настольных системах. Однако большинству встраиваемых систем такая поддержка не требуется и NetBSD предоставляет все Unix-возможности Linux, но с менее обремененительной лицензией и с лучшей переносимостью. Поскольку NetBSD не широко известна в среди потребителей, она не столь известна как Linux и среди производителей оригинальных встраиваемых систем. Однако NetBSD имеет коммерческую поддержку на рынке встраиваемых систем и может оказаться более предпочтительным вариантом Unix на этом рынке.

II. Коммерческие особенности: GPL

1. GPL

GNU General Public License (Генеральная Общественная Лицензия GNU) была создана Free Software Foundation (FSF - Фондом Свободного Программного Обеспечения) - организацией, возглавляемой Ричардом Столлманом и следующей принципам, согласно которым программное обеспечение должно быть свободным1. GPL с самого её начала создавалась как лицензия "copyleft"ПП2: хотя она позволяет пользователям копировать, изменять и распространять покрываемый ею код, GPL требует чтобы любые производные работы распространялись по условиям этой же лицензии. Другими словами, любая распространяемая модификация кода под GPL должна удовлетворять условиям GPL. Это "вирусное" свойство GPL делает её исключительно "липкой" лицензией - целые библиотеки программного обеспечения становятся "заражёнными" GPL, а проприетарныйПП3 код должен быть полностью отделён от кода GPL, чтобы оставаться проприетарным.

GPL достигает своих целей: практически невозможно делать деньги на продаже Linux, поскольку любой продаваемый дистрибутив Linux должен также иметь открытые исходные тексты, позволяя пользователям и конкурентам получать его бесплатноПП4. Более того, даже новые программные разработки - драйверы устройств, некоторые приложения и т.п. - автоматически подпадают под действие GPL, как только в них особо указывается, что "работа основана на [защищённой] Программе"2. Хотя точные рамки GPL остаются не ясными, большинство экспертов считают, что эти условия трактуются намного шире, чем обычно следует из определения "производной работы" в законе об авторском праве США, и действие GPL распространяется на код, который просто взаимодействуетПП5 или связывается с кодом GPL3. Как следствие, растёт количество причудливых приёмов, предназначенных для обхода этих положений, которые однако никто ещё не проверял в суде. Боле того, FSF заявил, что полагает все их недействительными4 и агрессивно ищет способы покончить с ними (например, при помощи "облегчённой" версии GPL только для внешних библиотек - LGPLПП6).

2. Лицензия BSD

В противоположность GPL лицензия BSD, покрывающая всё семейство операционных систем BSD с открытыми исходными текстами, не налагает ограничений на производные работы. Нет требования, что модификации BSD должны иметь открытый исходный код. Если пользователь желает, онаПП7 может модифицировать код BSD, сохранив в собственности весь получившийся продукт и попытаться ввести лицензионные сборы за его использование.

Хотя критики предрекают, что лицензия BSD ведёт к фрагментации кода, её не наступает. Четыре проекта BSD с открытыми исходными текстами часто обмениваются кодом и вместо фрагментации происходит растущая специализация, поскольку проекты сконцентрированы на разных областях интересов5. Wind River Systems предлагает проприетарную версию BSD - BSD/OS (в текущей версии 4.3)ПП8, но поскольку в открытых сообществах состоит больше разработчиков, чем в одной компании, она ещё не стала примером значительных инноваций, не стала ни обобществлённой, ни излишней среди открытых систем. Важнее то, что лицензия BSD позволяет проектам, таким как Apache и X11, наряду с Wind River и производителями оригинальных встраиваемых устройств, изменять код BSD и сохранять результаты в частной собственности или открывать исходные тексты, в зависимости от того, что оказывается выгоднее.

3. Последствия для рынка встраиваемых систем

Как только Linux начал теснить Microsoft в качестве настольной и серверной системы, бегемоты программного обеспечения пролили немало чернил, осуждая GPL как неэтичную по отношению к интеллектуальной собственности, разработке программного обеспечения и американскому капитализму. Эта дезинформация безосновательна. Компании, использующие Linux на серверах, могут продолжать хранить на этих серверах свои проприетарные данные. Компании-разработчики программного обеспечения могут продолжать писать проприетарные приложения для запуска в Linux. И для пользователей настольных систем надёжность Linux, характерная для Unix, может быть значительным преимуществом по сравнению с продуктами Microsoft, печально известными своей склонностью к падениям. Хотя в отдельных случаях может понадобиться изменить код под GPL, большинство обычных пользователей настольных и серверных систем не модифицируют код операционных систем.

Однако, в области встраиваемых систем GPL имеет большое значение. Изменения в ядре находятся в центре процесса разработки многих встраиваемых оригинальных устройств. Перенос ядра на новые архитектуры, разработка драйверов устройств и т.п. - неотъемлемые задачи подгонки операционной системы для работы на новом или уникальном оборудовании. В соответствии с GPL всё программное обеспечение такого рода должно иметь открытые исходные тексты. GPL приводит к тому, что:

  1. Значительные вложения в интеллектуальную собственность оказываются полностью бесполезными, оплаченное потребителем программное обеспечение должно быть доступно конкурентам. (Например, новый драйвер устройства, разработка которого может стоить несколько месяцев и сотни тысяч долларов, должен быть доступен конкурентам сразу после выпуска.)ПП9
  2. Раскрытие конфигурации аппаратного обеспечения оригинального устройства позволяет конкурентам легко произвести "обратную разработку" при помощи соответствующих программных средствПП10.
  3. Возникает неопределённость по вопросу законности прикладного программного обеспечения. Без юридически установленных границ времени или области действия GPL и с идеологически-мотивированными "фанатиками" свободного программного обеспечения, отслеживающими нарушения, компании никогда не могут быть уверены в том, что созданное ими программное обеспечение по закону принадлежит им.

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

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

III. Технические особенности

Хотя GPL - единственное очевидное отличие между операционными системами Linux и BSD, имеются и технические отличия. Т.к. только NetBSD работает на широком диапазоне архитектур оборудования, что обычно бывает нужно во встраиваемых системах, в этом разделе внимание обращено исключительно на NetBSD. Но отдельные соображения справедливы и по отношению к FreeBSD.

1. Переносимость, абстракция от оборудования

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

Быстрая переносимость NetBSD обеспечивается уникальным слоем модульной переносимости - Modular Portability Layer или MPL. При помощи MPL драйвер полностью изолируется от аппаратной платформы, не зависит от инструкций ввода-вывода или их отсутствия, от взаимоблокировок, повторов для исправления ошибок, буферов отказов, типов границ памяти, карт векторного ввода-вывода главного моста и даже от периферийных устройств, имитирующих прямой доступ в память с помощью буфера в оперативной памяти и копирования данных процессором для их передачи и приёма - всё это прозрачно обрабатывается на уровне, лежащем ниже драйверов. Более того, некоторые встраиваемые системы на основе NetBSD не потребовали разработки никакого дополнительного программного обеспечения, кроме инструментов кросскомпиляции и изменения целевой архитектуры.

Однако в случае с Linux код драйвера устройства нужно перерабатывать для каждой новой архитектуры. Как следствие, при недавно выполненных переносах на новое оборудование NetBSD потребовала меньше 10% времени по сравнению со временем на перенос Linux. Инженеры перенесли NetBSD на процессорное ядро SuperH за шесть недель, а перенос Linux занял три месяца. NetBSD была перенесена на AMD x86-64 в течение месяца, а перенос Linux занял шесть месяцев. В результате NetBSD в одном и том же дереве исходных текстов поддерживатся пятьдесят одна архитектура.

2. Архитекутра ядра и инструменты разработки

  1. Отладчик, встроенный в ядро NetBSD, позволяет вести исчерпывающую низкоуровневую отладку в реальном времени как на целевой системе, так и удалённо с рабочей станции. Отладка ядра Linux возможна только при помощи сторонних инструментов JTAG.
  2. Модульная структура ядра NetBSD позволяет ускорить внесение изменений в код и увеличить их наглядность по сравнению с Linux, в котором нет модульной структуры подобного уровня.
  3. При аварии в ядре NetBSD позволяет записать на диск полный образ системной памяти. Содержимое диска может быть исследовано при помощи обычных инструментов для работы с ядром. Linux не позволяет снимать полные образы памяти ядра.
  4. Система автоконфигурирования упрощет настройку ядра NetBSD, облегчает настройку системы и устройств. Для использования оборудования в Linux часто бывает нужно указать информацию о нём явным образом.
  5. Система кросс-компиляции NetBSD (build.sh) позволяет пользователям легко выбирать различные аппаратные архитектуры на одном и том же сборочном компьютере, который может работать не под управлением NetBSD. Возможности кросс-компиляции Linux более ограничены, однако компании часто предлагают проприетарные инструменты для кросс-компиляции встраиваемых систем на основе Linux (по значительной цене), а без таких инструментов процесс ручной кросс-компиляции сложен. (С примером такого процесса сборки можно познакомиться по ссылке http://www.ltc.com/~brad/mips/mips-crosstoolchain.html.)

3. Подходы к разработке операционных систем

NetBSD и Linux разрабатываются в соответствии с очень разными подходами. NetBSD разрабатывается унифицированным путём, при котором Core Team (Ключевая Команда) проекта NetBSD просматривает доработки и изменения в дереве исходных текстов NetBSD. Придерживаясь принципа, что первое предложение не всегда лучшее, Core Team NetBSD внимательно контролирует доступ к дереву исходных текстов, зачастую отклоняя сырые разработки в ожидании более качественных. Эти привратники играют важную роль, потому что сопровождают единое дерево исходных текстов NetBSD, обеспечивая сборку всех архитектур при каждом релизе, высокое качество кода и максимально согласованное окружение для всех платформ.

У Linux изначально более "анархичное" сообщество разработчиков. Нет единого дистрибутива Linux, но есть множество дистрибутивов с различными особенностями. Пока рынок тяготеет к нескольким дистрибутивам (RedHat, SuSE, SCO), а разработчики - к другим (Slackware, Debian), код разных дистрибутивов остаётся различным. Более того, т.к. не существует единого дерева исходных текстов для всех архитектур, Linux для i386 может сильно отличаться от Linux для x86-64. Каждый релиз собирается, тестируется и распространяется самостоятельно.

Оба сообщества отстаивают свои подходы к разработке. Сообщество NetBSD указывает на некоторые модули сравнительно низкого качества, которые были интегрированных в Linux (или в отдельные дистрибутивы Linux) просто потому, что они были разработаны раньше, чем более качественные альтернативы. Например, существовало как минимум два полностью независимых стека USB для Linux, пока Линус Торвальдс не посчитал оба существующих неудовлетворительными и не написал вместо них новый. (Объясняя свой выбор определённого API, Торвальдс заявил: "потому что я так захотел".) В сообществе NetBSD считают, что большое количество дистрибутивов Linux одновременно обескураживает и пугает, потому что наработки одного дистрибутива могут присутствовать или отсутствовать в другом. Разработчики Linux считают, что большое количество дистрибутивов расширяет разнообразие доступных возможностей для пользователей и что не существует единого стандарта качества, который пытаются навязывать защитники NetBSD. Однако лидеры сообществ Linux централизуют разработку, формируя круг друзей и приближённых, в некоторой степени повторяя функции Core Team NetBSD.

Сообщество Linux по большей части право, когда указывает на популярность и широкую поддержку архитектур. Оно имеет достаточно интеллектуального капитала, чтобы поддерживать множество дистрибутивов Linux для i386 и подобных платформ, а рынок достаточно ёмкий для уверенности в качестве кода. Однако, если речь заходит о более специализированных платформах без широкой рыночной поддержки, то тут положение Linux не столь уверенное. Платформам, произведённым по лицензии SuperH, MIPS и прочих поставщиков, недостаёт общих исходных текстов для всех архитектур и совместной разработки, что может оказаться критичным, т.к. пользователи вынуждены тратить много времени на отладку и самостоятельную доработку (или платить за это консультантам). Для встраиваемых систем, где востребованы необычные конфигурации оборудования, NetBSD оказывается предпочтительнее.

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

4. Зрелость кодовой базы

NetBSD - это результат двадцати пяти лет открытой разработки. Как следствие, кодовая база обладает высокой зрелостью. Например, сетевой код обеспечивает высокую производительность и лучше чем Linux защищает от атак типа "отказ в обслуживании". При ближайшем рассмотрении средства TCP/IP в Linux имеют менее известное качество, чем в NetBSD, которые считаются образцовой реализацией для всех систем типа Unix. Кроме того, в NetBSD ранее чем в Linux интегрирована поддержка IPv6. Чем раньше обнаруживаются ошибки, тем раньше они устраняются. Хотя во многих областях новое означает лучшее, когда заходит речь о коде операционной системы, то более зрелая кодовая база означает более высокую стабильность и предсказуемость, а следовательно и предпочтительность.

5. Система управления памятью

Система управления памятью Linux спроектирована для работы с трёхуровневым модулем управления памятью процессоров Intel x86. Для этого и подобных процессоров она оказывается исключительно подходящей. Однако системы с другой структурой модуля управления памятью вынуждены страдать от сложности и потери производительности, вызванных тем что нижележащее оборудование вынуждено изображать из себя трёхуровневый модуль управления памятью. Во многих случаях доступ к особым низкоуровневым деталям оборудования (например, для обновления TLB) оказывается разбросан по ядру. В NetBSD имеется абстракция pmap, предоставляющая высокоуровневым подпрограммам чётко определённый интерфейс для выполнения операций с виртуальной памятью. Низкоуровневый код pmap каждого процессора может реализовать структуры данных и алгоритмы, лучше всего соответствующие его модулю управления памятью.

6. Потоки и планирование

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

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

7. Поддержка прикладных программ

Обладая большой пользовательской базой, Linux лучше NetBSD поддерживает прикладные программы, что однако не касается FreeBSD или Mac OS X. Однако большинству встраиваемых устройств не требуется высокий уровень поддержки прикладных программ. Обычно это не так важно, как удобство разработки и высокая производительность. Но всё же NetBSD поддерживает возможность запуска двоичных программ, скомпилированных для других систем, среди которых можно назвать устаревшие программы для Linux, FreeBSD, BSD/OS, Solaris, HP-UX, Digital Unix, SCO, IRIX и других систем. В Linux же поддерживается запуск небольшого подмножества двоичных программ из сторонних операционных систем.

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

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

IV. Заключение

Не существует оптимального выбора операционной системы Unix для всех применений. На серверах и настольных компьютерах большинство обсуждённых здесь особенностей имеют среднюю важность, а первостепенную важность может иметь наличие коммерческой поддержки. И хотя поставщики BSD, такие как Wasabi Systems и Wind River Systems, предлагают широкий диапазон поддержки BSD (Wind River - поддержку BSD/OS, а Wasabi - поддержку NetBSD), эти предложения в первую очередь нацелены на рынок встраиваемых систем. При изобилии поставщиков поддержки и разработчиков приложений Linux всё же может оказаться более предпочтительным выбором.

Однако в случае встраиваемых систем критерии выбора другие. Неопределённость GPL - это фактор риска, который должен быть принят во внимание любым поставщиком оригинальных встраиваемых устройств на основе Linux. И хотя есть несколько компаний, использующих различные непроверенные пути обхода GPL, простое существование обходных путей свидетельствует о наличии рисков, связанных с этой лицензией. При использовании Linux во встраиваемых устройствах GPL сама по себе порождает сомнения в законности и коммерческой перспективе. Там, где единственным вариантом Unix для встраивания является Linux, можно пойти на компромисс. Однако учитывая что NetBSD может оказаться производительнее и может работать на большем количестве аппаратных платформ, не стоит ввязываться в азартную игру. NetBSD предлагает превосходную функциональность Unix на большем количестве платформ по сравнению с Linux и имеет не столь обременяющую лицензию. Она может дать производителям оригинальных встраиваемых устройств лучшее из двух миров.

Сноски

  1. Хотя название Linux происходит от имени Линуса Торвальдса, Столлман ответственнен за код операционной системы. Glyn Moody, Rebel Code: Inside Linux and the Open Source Revolution 93 (Глин Муди, Код бунта: Внутри Linux и революции открытых исходных текстов 93), 2001.
  2. Free Software Foundation, GNU General Public License (Фонд Свободного Программного Обеспечения, Генеральная Общественная Лицензия GNU), http://www.gnu.org/copyleft/gpl.html (выделено нами).
  3. Open Software Licenses: Part 2, 5.10 Intellectual Prop. Strategist, July 1999 (Лицензии Открытого Программного Обеспечения: Часть 2, 5.10 стратег интеллектуальной собственности, июль 1999).
  4. Письма членов FSF Мэтту Эсэю, цитируется по Matt Asay, A Funny Thing Happened on the Way to the Market: Linux, the General Public License, and a New Model for Software Innovation, April 2002 (Мэтт Эсэй, Забавное происшествие на пути к рынку: Linux, Генеральная Общественная Лицензия и новая модель инноваций программного обеспечения, апрель 2002) (по файлу автора).
  5. Исторически FreeBSD сосредоточена на поддержке прикладных программ и широко используется в качестве сервера. NetBSD соредоточена на широкой поддержке платформ и широко используется во встраиваемых устройствах. OpenBSD сосредоточена на безопасности.

Примечания переводчика

  1. В оригинале используется термин "White Paper", который применяется по отношению к документам, описывающим некую проблему и обосновывающим выбранный авторами подход к её решению. Подробнее см. также статью в Wikipedia: Вайт пейпер
  2. Игра слов, в противоположность "copyright" - авторскому праву, "copyleft" на русский язык можно перевести как "авторское лево".
  3. Здесь и далее использован устоявшийся перевод "проприетарный". См. пояснение смысла слова по ссылке https://newslab.ru/article/307552.
  4. Конкуренты получают исходные тексты бесплатно, но и они вынуждены раздавать бесплатно свои исходные тексты, поэтому условия равны.
  5. GPL распространяется только на статически или динамически связанный код. Проприетарный код, отделённый от кода GPL и взаимодействующий с ним иным образом через задокументированный интерфейс, может оставаться проприетарным.
  6. LGPL была придумана для облегчения использования кода GPL с проприетарным кодом. LGPL разрешает статическое и динамическое связывание с проприетарным кодом без необходимости взаимодействовать с ним через открытый интерфейс.
  7. Фраза "пользователь ... она", видимо, употреблена как дань движению феминизма.
  8. В год написания этого документа Wind River забросила разработку BSD/OS и стала разрабатывать собственный дистрибутив Linux - Wind River Linux.
  9. Конкуренты находятся в такой же ситуации. Конечному пользователю продаётся устройство, а не драйвер, поэтому все расходы на разработку драйвера должны закладываться в стоимость устройства.
  10. И опять можно возразить, что конкуренты находятся в такой же ситуации.

© 2003 Wasabi Systems Inc. Все права защищены. Этот документ не может продаваться или распространяться без разрешения Wasabi Systems Inc. (www.wasabisystems.com). Цитирование этого документа должно включать уведомление об авторских правах.

Автор перевода на русский язык: Владимир Ступин