Введение

BusyBox — это набор программного обеспечения, предоставляющий множество утилит Unix в одном исполняемом файле. Он работает в различных средах POSIX, таких как Linux, Android и FreeBSD, хотя многие из предоставляемых инструментов разработаны для работы с интерфейсами, предоставляемыми ядром Linux. BusyBox был специально создан для встраиваемых операционных систем с крайне ограниченными ресурсами. Авторы назвали его «Швейцарским армейским ножом встраиваемого Linux», поскольку один исполняемый файл заменяет базовые функции более 300 распространенных команд. Он распространяется как свободное программное обеспечение на условиях GNU General Public License v2, после спорного решения не переходить на версию 3. Изначально BusyBox был нацелен на размещение полной загрузочной системы на одной дискете, которая служила бы как аварийным диском, так и установщиком дистрибутива Debian. С тех пор он был расширен и стал де-факто стандартным базовым набором инструментов для встраиваемых устройств Linux и установщиков дистрибутивов Linux. Поскольку каждый исполняемый файл Linux требует несколько килобайт служебных данных, объединение более двухсот программ в BusyBox часто позволяет существенно сэкономить дисковое пространство и системную память. До начала 1998 года BusyBox поддерживался Энрике Занарди и был ориентирован на потребности системы установки загрузочных дисков Debian, после чего Дэйв Синеге возглавил проект Linux Router Project (LRP). Синеге внес ряд дополнений, создал модульную среду сборки и переориентировал BusyBox на общие встраиваемые системы высокого уровня. Когда в 1999 году разработка LRP замедлилась, Эрик Андерсен из Lineo, Inc. взял на себя проект и стал официальным сопровождающим с декабря 1999 года по март 2006 года. За это время рынок встраиваемых Linux стремительно рос, и BusyBox значительно развился, расширив как свою пользовательскую базу, так и функциональность. Роб Лэндли был сопровождающим в 2005 году до конца 2006 года, после чего Денис Власенко занял должность нынешнего сопровождающего.

Споры о GPLv2/GPLv3

В сентябре 2006 года, после напряженных обсуждений и разногласий между сопровождающим проекта Робом Лэндли и Брюсом Перенсом, проект BusyBox отказался от принятия GNU General Public License Version 3 (GPLv3); лицензия BusyBox была уточнена как исключительно GPL 2.0. С октября 2006 года Денис Власенко принял на себя сопровождение BusyBox от Роба Лэндли, который, также в результате споров о лицензии, начал разработку Toybox.

Иски по GPL

В конце 2007 года BusyBox также приобрел известность благодаря активному преследованию нарушений условий своей лицензии (GPL) в Окружном суде США по Южному округу Нью-Йорка. Первый иск в США, касающийся нарушения GPL, был связан с использованием BusyBox во встроенном устройстве. Иск, 21 ноября 2007 года SFLC подала два аналогичных иска от имени Andersen и Landley против еще двух компаний: Xterasys (дело № 07 CV 10455) и High Gain Antennas (дело № 07 CV 10456). Дело Xterasys было урегулировано 17 декабря путем публикации использованного исходного кода и выплаты нераскрытой суммы, а дело High Gain Antennas – 6 марта 2008 года при условии соблюдения лицензии и выплаты нераскрытой суммы. 7 декабря 2007 года был подан иск против Verizon Communications в связи с распространением прошивки для маршрутизаторов Actiontec; это дело было урегулировано 17 марта 2008 года при условии соблюдения лицензии, назначения ответственного лица для контроля за соблюдением лицензий на свободное программное обеспечение в будущем и выплаты нераскрытой суммы. 9 июня 2008 года были поданы дополнительные иски против Bell Microproducts (дело № 08 CV 5270) и SuperMicro (дело № 08 CV 5269), дело Super Micro было урегулировано 23 июля 2008 года. BusyBox и Bell Microproducts также достигли внесудебного соглашения 17 октября. 14 декабря 2009 года был подан новый иск, в котором фигурировали четырнадцать ответчиков, включая Best Buy, JVC, Samsung и другие. В феврале 2010 года Samsung выпустила прошивку для телевизора LN52A650 под лицензией GPLv2, которая впоследствии была использована в качестве справочного материала в проекте сообщества SamyGO. Около 3 августа 2010 года BusyBox выиграл у Westinghouse решение суда о взыскании тройного ущерба в размере 90 000 долларов, судебных издержек и гонораров адвокатов в размере 47 865 долларов, а также права собственности на "вероятно, большое количество телевизоров высокой четкости" в качестве оборудования, нарушающего авторские права, в судебном процессе Software Freedom Conservancy v. Best Buy и др., деле о нарушении GPL, упомянутом в предыдущем абзаце. Ни один другой разработчик, включая оригинального автора Брюса Перенса и сопровождающего Дэйва Синеге, не был представлен в этих процессах или не являлся стороной соглашений. 15 декабря 2009 года Перенс опубликовал заявление, в котором выразил свое недовольство некоторыми аспектами правовой ситуации и, в частности, заявил, что нынешние разработчики BusyBox "похоже, удалили некоторые заявления об авторских правах других разработчиков BusyBox и, похоже, изменили лицензионные заявления".

Особенности

BusyBox можно настроить для предоставления подмножества из более чем двухсот утилит. Он может обеспечить большинство утилит, указанных в Единой спецификации Unix (SUS), а также множество других, которые пользователь ожидает увидеть в системе Linux. BusyBox использует оболочку Almquist, также известную как A Shell, ash и sh. В качестве альтернативы для настройки можно использовать более компактную оболочку 'hush'. Ранее были доступны оболочки "msh" и "lash". Поскольку это полноценная система начальной загрузки, она может заменить демон init и udev (или современный systemd), используя себя для запуска в качестве init при старте системы и mdev при подключении устройств на ходу. Полный список реализованных утилит доступен на веб-сайте BusyBox.

Однозначный двоичный

Типичные компьютерные программы имеют отдельный двоичный (исполняемый) файл для каждого приложения. BusyBox — это единый бинарный файл, представляющий собой объединение множества приложений, каждое из которых можно вызвать, обращаясь к единственному бинарному файлу BusyBox с разными именами (поддерживаемыми символическими или жесткими ссылками для каждого имени) определенным образом с соответствующими аргументами. BusyBox выигрывает от такого подхода, поскольку это снижает накладные расходы, связанные с форматом исполняемых файлов (обычно ELF), и позволяет совместно использовать код между несколькими приложениями без использования библиотек. Эта техника аналогична той, что предоставляет команда crunchgen в FreeBSD, но BusyBox предлагает упрощенные версии утилит (например, команда ls без возможности сортировки файлов), в то время как сумма всех утилит, сгенерированная crunchgen, предоставляет полнофункциональные версии. Совместное использование общего кода и рутин, написанных с учетом оптимизации размера, позволяет системе BusyBox занимать значительно меньше места для хранения, чем система, построенная с использованием соответствующих полных версий утилит, замененных BusyBox. Исследования, сравнивающие реализации стандартных команд Unix от GNU, BusyBox, asmutils и Perl, показали, что в некоторых ситуациях BusyBox может работать быстрее, чем другие реализации, но это не всегда так.

Приборы и прием

BusyBox используется рядом операционных систем, работающих на встраиваемых системах, и является ключевым компонентом дистрибутивов, таких как OpenWrt, OpenEmbedded (включая Yocto Project) и Buildroot. Sharp Zaurus активно использует BusyBox для выполнения стандартных Unix-подобных задач в системной оболочке. BusyBox также является важным компонентом VMware ESXi и Alpine Linux, которые не являются встраиваемыми дистрибутивами. Он необходим для ряда root-приложений на Android и предустановлен в некоторых решениях для получения root-доступа в один клик, например, Kingo Root.

Спор о Toybox

Toybox был запущен в начале 2006 года под лицензией GPL 2.0 бывшим сопровождающим BusyBox Робом Лэндли в результате разногласий, возникших в ходе обсуждений GPLv3 и GPLv2. В конце 2011 года проект был перелицензирован под лицензией BSD 2-Clause после периода бездействия. В марте 2013 года лицензия была изменена снова, на 0BSD. 11 января 2012 года Тим Берд, сотрудник Sony, предложил создать альтернативу BusyBox, которая не подпадала бы под действие GNU General Public License. Он предложил использовать в качестве основы неактивный проект Toybox. В январе 2012 года предложение создать BSD-лицензированную альтернативу BusyBox, лицензированному по GPL, вызвало резкую критику со стороны Мэтью Гарретта, который утверждал, что это лишает группу Software Freedom Conservancy единственного эффективного инструмента для защиты авторских прав. Роб Лэндли, инициатор судебных исков, связанных с BusyBox, ответил, что это было сделано намеренно, поскольку он пришел к выводу, что эти иски не принесли ожидаемых положительных результатов, и он хотел остановить их "любым способом, который сочтет подходящим".