Содержание статьи
Рассказ о самых необычных и странных событиях, произошедших в мире Open Source
UNIX и Open Source когда-то выросли из идей, казавшихся безумными даже их прародителям, Linux появился в результате эксперимента, BSD — следствие увлечения студентов. Очень многое в мире Open Source — случайность и эксперимент. А какие сегодня можно встретить безумные идеи и эксперименты?
Работает даже на тостере
До начала повсеместной экспансии Linux на все мыслимые и немыслимые устройства пальму первенства среди самых портируемых ОС уверенно занимала NetBSD. Ее можно было установить на практически все существующие и хоть сколько-нибудь популярные компьютерные системы, включая даже такие ископаемые, как машины на базе процессора Motorola 68000. Однако наибольшую известность получил порт системы на тостер.
В 2005 году компания Technologic Systems представила миру первый полностью рабочий тостер на базе NetBSD. В его основе лежал одноплатный компьютер их собственного производства TS–7200 с ARM-процессором на 200 МГц и 32 Мб оперативной памяти (продается до сих пор, кстати), а с внешней стороны располагались четырехстрочный LCD-дисплей, USB-порт для подключения клавиатуры, порт Ethernet и последовательный порт для подключения консоли.
Находящийся внутри компьютер включал в себя полноценную инсталляцию NetBSD с предустановленными веб-сервером Apache, PHP, а также набором CGI-скриптов для удаленного выполнения различных операций, таких как проигрывание аудио через USB-аудиосистему, управление LCD-экраном и так далее. К сожалению, компоненты, отвечающие за приготовление тостов, так и остались механическими, поэтому включить процесс приготовления удаленно с помощью SSH было нельзя. Зато тостер умел вести статистику по приготовленным тостам и автоматически запускать задачи в начале и по окончании поджарки.
Хакер #175. 100 программ для хакера
ОС в браузере
Кроме тостеров и прочего экзотического железа, не так давно NetBSD прославилась еще одним необычным портом. На этот раз систему запустили в браузере, не используя никаких плагинов и прочих костылей. Все ядро системы, а также несколько драйверов и утилит пространства пользователя было транслировано в набор скриптов на языке JavaScript, которые можно запустить в любом браузере.
Осуществить такое удалось благодаря наличию в ядре NetBSD слоя абстракции RUMP (Runnable Userspace Meta Program), который представляет собой прослойку над железом в стиле гипервизора или этакого микроядра. RUMP позволяет выносить части ядра или все ядро целиком в пространство пользователя, из которого они смогут получать доступ к гипервизору с помощью специального API.
Чтобы перенести ядро в браузер, разработчики NetBSD взяли код RUMP-ядра, применили к нему транслятор Emscripten для перевода на язык JavaScript, а затем реализовали на том же JavaScript минималистичный гипервизор, под управлением которого и запустили RUMP-ядро. В JavaScript также были транслированы некоторые драйверы файловых систем (FFS, Tmpfs и kernfs) и несколько утилит командной строки. Все это уместилось в 5 Мб и может быть протестировано в любом браузере по этой ссылке.
Несмотря на экспериментальный характер проекта, он имеет вполне себе утилитарные цели. Одно из применений такого ядра разработчики видят в том, чтобы позволить веб-приложениям выполнять сложные функции, ранее присущие только операционным системам. Например, с помощью такого JavaScript-ядра можно легко реализовать веб-приложение, позволяющее напрямую работать с образами файловых систем без необходимости запускать какие-либо процессы на серверной стороне.
JavaScript-ядро уже включено в официальный список портов NetBSD и располагается в каталоге sys/arch/javascript. Конец i386 близок как никогда.
Комп в браузере
Но зачем ограничиваться одним ядром, когда в браузер можно запихнуть весь компьютер, а точнее, его виртуальный аналог? Именно это сделал неугомонный математик, а по совместительству автор эмулятора QEMU и медиапакета FFmpeg Фабрис Беллар. Исключительно ради проверки текущих возможностей JS, а также собственных скиллов он сел и начал реализацию браузерного эмулятора ПК с нуля.
В результате появился удивительно быстрый эмулятор, способный загрузить linux–2.6.20 с виртуальной файловой системой, содержащей практически все стандартные команды Linux, буквально за несколько секунд (8,478 в Chrome 28, если быть точным). Причем, по заявлению Беллара, JavaScript позволил реализовать некоторые оптимизации, отсутствующие в QEMU, и таким образом в некоторых местах добиться более высокой, в сравнении с тем же QEMU, производительности.
Во всем остальном возможности эмулятора довольно стандартные: набор инструкций i486, эмуляция сетевой карты и текстового видеоадаптера. Поддержка дисковых накопителей пока не реализована, как и поддержка сопроцессора и наборов инструкций MMX, SSE. Однако все это не мешает работе Linux, благодаря наличию в ядре эмулятора сопроцессора и поддержки виртуальных дисковых накопителей в памяти.
Полюбоваться работой этого чуда программистской мысли можно на странице автора. Сразу после входа начнется загрузка эмулятора, в конце которой выпадет консоль и станут доступны редакторы vi и qemacs, компилятор tcc, сетевые серверы dnsd, ntpd, ftpd, httpd, sendmail и многое другое.
INFO
Последняя разработка Фабриса Беллара — реализованная софтверно базовая станция 4G LTE, которую может запустить любой желающий, обзаведясь средненьким компом и дешевенькой антенной.
ОС для калькулятора
Если полноценный UNIX в браузере тебя не впечатлил, то как насчет UNIX’а в калькуляторе? TI–92+ — программируемый калькулятор для серьезных математиков, начинка его равна среднему компу примерно 30-летней давности: процессор на 12 МГц, 256 Кб оперативной памяти, 2 Мб постоянной, плюс полноценная QWERTY-клавиатура и растровый экран с разрешением 240 × 128. Работает под управлением собственной минималистичной ОС и позволяет выполнять множество самых разнообразных математических операций.
Полноценную NetBSD или Linux в него не впихнешь, ввиду уж слишком ограниченных ресурсов, а вот стороннюю минималистичную ОС вполне. Этой возможностью и решили воспользоваться энтузиасты, создавшие Punix — UNIX-подобную ОС для TI–92+. Система, кстати говоря, для столь ограниченных ресурсов получилась очень даже неплохая. Поддерживается вытесняющая многозадачность, виртуальные терминалы, организация прямой связи с внешним ПК или другим калькулятором через порт ввода-вывода, вывод звука через /dev/audio
. Доступны стандартные UNIX-утилиты: sh, top, cat, true, false, clear, uname, env, id и date.
Написана система почти целиком на языке Си и распространяется под лицензией BSD. Если у тебя есть возможность стать владельцем такого калькулятора, то я настоятельно рекомендую потестить операционку, скачав и собрав ее из исходников.
Унитаз с удаленным управлением
Японцы — народ изобретательный и технически продвинутый. Они готовы автоматизировать, роботизировать и компьютеризировать все, до чего только дотянутся их руки. И вот, после автоматизации велопарковок, домов, автобусных станций и поездов, они добрались до самого ценного, что есть в доме, — туалета. Новые унитазы линейки Satis, выпускаемые японской фирмой Lixil, не только сделают всю грязную работу за тебя (в разумных пределах, конечно), но и позволят рулить унитазом удаленно, используя Android-приложение.
Lixil Satis обладает всей функциональностью, которая только может понадобиться в умном унитазе. Это и регулировка температуры сиденья, и автоматический смыв, и закрытие крышки, и, конечно же, незаменимая функция проигрывания музыки для большего комфорта. Однако, используя фирменное Android-приложение, работающее с унитазом по протоколу Bluetooth, ты получишь еще больший контроль над устройством. Например, ты сможешь заблаговременно открыть крышку еще до входа в туалет, выбрать наиболее подходящую для данного момента музыкальную композицию и просмотреть журнал посещений уборной с подробной информацией о каждом событии.
Порт Android на C
Раз уж мы заговорили об Android, то нельзя не вспомнить и о довольно бесполезном начинании под названием XobotOS. В начале 2012 года компания Xamarin, которая занимается поддержкой Mono, инициировала проект по переписыванию всех Java-компонентов Android на язык C# и, как следствие, замену виртуальной машины Dalvik на Mono. В результате на свет появилась XobotOS, она же Android 4.0.3 с Mono внутри, код которой был выложен в репозиторий и ни разу не менялся с тех пор.
Интересно во всей этой истории то, что в результате вложения довольно значительных усилий в портирование системы каких-то существенных выгод, за исключением рекламы Mono, разработчики не получили. Все, что осталось в итоге, — это внесенные доработки в инструмент Sharpen, предназначенный для трансляции Java в C#, а также изменения в порте Mono на Android, который избавился от привязки к Java.
Зато родился график, который очень красноречиво показывает, насколько более эффективной стала система — производительность возросла более чем в шесть раз. Однако тест, его генерирующий, на проверку оказался полностью синтетическим и не отражающим ровным счетом ничего.
Графическая подсистема в ядре
Как известно, на определенном этапе проектирования программисты, разрабатывающие Windows NT, пришли к выводу, что в целях эффективности вся графическая подсистема ОС должна находиться в ядре. В UNIX, с другой стороны, система X Window всегда была хоть и привилегированным, но пользовательским процессом, который обращался к ядру только с целью получить доступ к адресному пространству видеоадаптера. Такой подход считался неэффективным, поэтому разговоры о том, что Linux должен следовать по пути Windows и тоже включать в ядро графическую систему, в какой-то момент стали самым популярным занятием линуксоидов.
Люди в теме прекрасно понимали, что на самом деле переносить всю графику в ядро ни в коем случае нельзя и что наряду с незначительным поднятием производительности мы получим массу самых разнообразных проблем, от раздувания ядра до уничтожения совместимости со всем существующим софтом. Однако для некоторых идея переноса графической системы в ядро показалась интересной и правильной. В результате появился Framebuffer UI — оконная система, работающая внутри ядра и базирующаяся на интерфейсе Framebuffer (fbdev), этаком универсальном средстве программирования любого видеоадаптера в ядре Linux.
Вся графическая система представляла собой небольшой модуль ядра, реализующий примитивную оконную систему, и набор стандартных приложений, таких как часы, календарь, терминал и даже плеер MPEG–2. В распоряжении программистов также была библиотека libfbui для создания собственных приложений. Назначение этой системы и ее преимущества перед классическими оконными системами в пространстве пользователя так и остались непонятными.
Текстовый оконный интерфейс
Если графическая система в ядре Linux тебя не сильно впечатлила, то, может быть, впечатлит многооконная система, работающая в текстовом режиме? Еще в 1993 году Массимилиано Гиларди решил развить свои скиллы в программировании, написав оконную систему, работающую прямо в терминале DOS, то есть отрисовываемую только с помощью ASCII-символов без перехода в графический режим. На определенном этапе разработки он заметил, что однозадачный DOS никак не может быть использован для запуска сразу нескольких приложений в разных окнах (а реализовать псевдомногозадачность а-ля Windows 3.11 он не смог), и, раздосадованный, забросил проект.
Но на этом история не закончилась. Открыв для себя многозадачный Linux в конце 90-х, Джиларди решил возобновить проект и начал процесс портирования Twin в среду Linux. В результате он довел самую бесполезную оконную систему в мире до очень приличного уровня развития. Последняя версия, выпущенная в 2012 году, поставляется с солидным набором приложений, поддерживает несколько типов раскладок окон, много опций конфигурирования, несколько одновременных сессий с возможностью детачинга и многое-многое другое.
Опробовать это чудо ты можешь практически в любом дистрибутиве, установив одноименный пакет. Рекомендую запускать в голой консоли, так как в иксах система задействует графические возможности для декорирования окон. В общем, прощайте, screen и tmux, до здравствует Twin!
Кластер из Raspberry Pi
Дешевый и расширяемый Raspberry Pi заработал огромную популярность среди гиков всех мастей. Одни используют его для управления световыми приборами, другие — для автоматизации приготовления кофе, третьи — в качестве медиацентра, а некоторые — для создания кластеров большой вычислительной мощности. Энтузиасты из Саутгемптонcкого университета сделали такой кластер из 64 плат Raspberry Pi и конструктора Lego.
Как и сам Raspberry Pi, кластер получился со всех сторон бюджетный. Специальные стойки не заказывали, а собрали из конструктора Lego, для соединения задействовали обычный Ethernet-свитч, для питания использовали 13 удлинителей по пять розеток в каждом, в которые были вставлены недорогие 5-вольтовые блоки питания. Общий объем постоянной памяти кластера составил 1 Тб (64 SD-карты по 16 Гб), а объем оперативной памяти — 16 Гб. Общая стоимость — 4 тысячи долларов.
Для вычислений использован стандартный протокол MPI и набор Python-скриптов. Все исходники, а также инструкции по сборке ребята выложили в Сеть. Так что если у тебя появятся лишние четыре тысячи долларов и желание заиметь собственный кластер, то этот адрес тебе пригодится.
Долгожданный релиз: FreeBSD 2.2.9
Первого апреля 2006 года в мейл-листе FreeBSD появилось сообщение о доступности для загрузки долгожданной FreeBSD 2.2.9, выпущенной спустя семь с половиной лет с момента выхода версии 2.2.8. Казалось бы, всего лишь одна из многочисленных гиковых шуток, однако выяснилось, что релиз действительно существовал и его можно было загрузить с официальных FTP-серверов FreeBSD Foundation.
Среди наиболее существенных изменений отмечались: переход на XFree86 версии 3.3.3, с улучшенной поддержкой 2D-акселерации, поддержка Quake 2 в эмуляторе Linux, а также изменение кода драйвера wd(4), благодаря которому теперь обеспечивалась поддержка дисковых накопителей фантастического размера в 137 Гб! В планах на релиз 2.2.10 было избавление от дестабилизирующих возможностей, типа разделяемых библиотек и модулей ядра, а в дальнейшем — долгожданное воссоединение с 386BSD.
Lua в ядре ОС
И вновь о сумасшедших программистах из проекта NetBSD. Кроме запуска ядра в браузере и порта на тостер, эти ребята решили воплотить в жизнь еще более сумасшедшую идею — встроить в ядро скриптовый язык. Эта идея витала в сообществе NetBSD еще с 2010 года, но только в начале 2013-го они наконец-то собрались с духом закоммитить наработки в ветку current.
Идея всего проекта в том, чтобы встроить в ядро минималистичный интерпретатор языка Lua (который, кстати, называется Lunatik) и, таким образом, получить возможность быстрой модификации частей ядра для проверки новых идей, конфигурирования подсистем ядра, эффективной разработки драйверов и тому подобных вещей. Предполагается, что наличие Lua в ядре также существенно снизит порог вхождения новых разработчиков в команду.
Звучит, кстати, довольно здраво, особенно если учитывать, что Lua — один из самых простых для изучения языков, а его интерпретатор — один из самых компактных. По этой причине Lua любят использовать в движках игр.
Десять мест, где ты не ожидал увидеть Linux
- Мотоцикл. Mavizen TTX02 — первый гоночный электромотоцикл, оснащенный бортовым компьютером, с помощью которого можно выполнять мониторинг работы систем байка и тюнинг. Поддерживается подключение через USB-порт или по Wi-Fi.
- Большой адронный коллайдер. Полностью управляется с помощью Linux-систем.
- Система управл ения трафиком Сан-Франциско. Построена на базе машин с процессором Freescale PowerQUICC II Pro и работает под управлением Linux.
- Калькулятор TI Nspire CAS CX. Цветной экран 320 × 240, 100 Мб внутренней памяти, 64 Мб оперативной. Операционная система Linux, языки программирования TI-BASIC, Lua, а также Си и ассемблер после джейлбрейка.
- Управление воздушным трафиком. В 2006 году Федеральное управление гражданской авиации США перевело все машины, управляющие воздушным трафиком, на Linux.
- Поезда. Linux-система используется в Японии для управления прибытием и отправлением скоростных поездов.
- Подводная лодка. В 2004 году компания Lockheed Martin спустила на воду атомную субмарину, все бортовые компьютеры которой работают под управлением Red Hat Linux.
- Доение коров. В 2005 году шведская компания DeLaval начала выпускать роботизированную технику для доения коров. Вся система работает под управлением Linux и индивидуально выбирает время доения для каждой коровы.
- Биржа Нью-Йорка. Все машины, обслуживающие Нью-Йоркскую фондовую биржу, работают под управлением Linux.
- Автомобили. В сентябре 2011 года Toyota, Nissan, Jaguar и Land Rover вступили в состав новой рабочей группы Automotive Grade Linux (AGL), которая занимается разработкой бортовых автомобильных систем на базе мобильной операционной системы Tizen с ядром Linux и основанным на веб-технологиях интерфейсом.