Содержание статьи
Установочный образ Ubuntu весит 1,4 Гбайт, а уже установленная система занимает на диске 8 Гбайт. Базовый комплект KDE требует больше одного гигабайта на жестком диске и столько же в оперативке. Google Chrome после установки — 150 Мбайт. И это всего лишь система в базовой комплектации, графическая среда и браузер. Не многовато ли? Ребята из проекта suckless тоже считают, что много, но вместо того, чтобы сидеть и жаловаться, они пишут код и уже создали около двух десятков легких и быстрых приложений и даже собственный дистрибутив, который весит всего 15 Мбайт.
Вместо введения
Suckless — не просто проект создания лаконичных и легких приложений и дистрибутива, как, например, графическая среда LXDE или дистрибутив Tiny Core Linux. Эти ребята — настоящие хардкорщики, способные уместить менеджер окон в 2000 строк кода и переписать все стандартные утилиты Linux с нуля. Они делают не просто компактный и быстрый софт, а софт, который будет компактен настолько, насколько это вообще возможно. Для настройки своих приложений они предлагают перекомпилировать их с новыми опциями, а для обновления дистрибутива — использовать Git.
О некоторых из их инструментов ты уже наверняка слышал. Это мозаичный оконный менеджер dwm, который используют многие программисты и системные администраторы. Это dmenu — крохотное приложение, позволяющее создавать меню с автодополнением на лету. Это оконный менеджер wmii, уже не входящий в проект, но прочно с ним ассоциирующийся. И это минималистичный браузер surf, на первый взгляд абсолютно непригодный к использованию, но легко расширяемый с помощью скриптов и внешних приложений.
Если ты когда-нибудь задумывался, чем на самом деле пользуются матерые программисты, и хотел бы взглянуть, как на самом деле мог бы выглядеть «тот самый UNIX» сегодня, то эта статья для тебя.
Менеджер окон и меню приложений
Под крылом проекта развивается множество различных приложений, но костяк составляет графический софт, центральное место в котором занимает менеджер окон dwm. Он сильно отличается от того, что ты привык понимать под менеджером окон, и представляет мозаичную концепцию расположения окон. Все, что ты увидишь на экране, — это строка состояния сверху, в которой будут имена рабочих столов, имя текущего открытого окна и статусная информация, такая как дата, время и текущая нагрузка на процессор.
Сами окна здесь не имеют декораций и размещаются на экране так, чтобы заполнить все свободное пространство. Одно открытое окно займет весь экран, два поделят его поровну на две вертикальные части, третье окно разделит пространство со вторым. При этом можно менять раскладку окон на свой вкус с помощью мышки или клавиатуры либо запускать их в плавающем режиме. И так на каждом рабочем столе.
Xakep #210. Краткий экскурс в Ethereum
Больше в dwm фактически нет ничего примечательного, однако именно способ работы с окнами делает его по-настоящему удобным в сравнении с традиционными оконными менеджерами. Так же как и в случае с редактором vi, единожды привыкнув, ты уже не сможешь вернуться к обычным интерфейсам. И большое число других мозаичных менеджеров окон (многие из которых основаны на коде dwm) это подтверждает. К примеру, известный менеджер окон awesome основан на dwm, а менеджер окон wmii, использующий те же идеи, стал базой для не менее известного в узких кругах i3wm.
Ничего похожего на меню приложений или кнопку «Пуск» в самом dwm нет, но есть встроенная поддержка утилиты dmenu, единственная задача которой — принять на вход список слов и выдать на выход слово, выбранное пользователем. Dmenu доступна по сочетанию Alt + p и в dwm используется для запуска приложений. И опять же это совсем не то меню, к которому ты привык. На самом деле это просто строка ввода, которая открывается в верхней части экрана, ты начинаешь вводить имя приложения, а dmenu подсказывает возможные совпадения. Варианты можно выбрать клавишами навигации или просто нажать Tab для автодополнения. По сути, это простой и быстрый аналог GNOME Do и Quicksilver в OS X.
Браузер
У suckless есть свой браузер. И конечно, он настолько же минималистичный. Surf — это по большому счету просто окно для отображения контента веб-страницы с помощью WebKit. Ни панели инструментов, ни строки ввода, просто голая страница и набор клавиатурных комбинаций для навигации и открытия сайтов. Однако, как и в случае с dwm, функциональность surf легко расширить с помощью других инструментов.
Через dmenu можно открывать новые веб-сайты или закладки (понадобится внешний скрипт). Табы для браузера легко реализуются с помощью утилиты tabbed, также развиваемой в рамках проекта suckless. Tabbed позволяет использовать интерфейс табов с каким угодно приложением, поэтому его также можно задействовать для реализации терминала с табами или, например, управления окнами файлового менеджера.
Surf поддерживает скриптинг, как с помощью традиционных языков программирования, так и с помощью пользовательских JS/CSS. На сайте suckless можно найти множество самых разных скриптов, в том числе с реализацией механизма блокировки рекламы, закладок, истории, поиска, автологина на сайты, навигации по сайтам с клавиатуры и многого другого.
Весь софт, развиваемый в рамках проекта suckless, не имеет конфигурационных файлов. Если нужно настроить приложение по своему вкусу — вноси правки в исходник config.h и перекомпилируй приложение.
Терминал, блокиратор экрана и утилиты
Набор графических приложений suckless был бы неполон, если бы у них не было собственной реализации эмулятора терминала, утилит для управления окнами приложений из командной строки и скриптов. Эмулятор терминала здесь носит имя st и особо не отличается от любого другого эмулятора: поддержка 256 цветов, UTF-8, копирование и вставка, сглаженные шрифты, эмуляция VT10X. Все как у людей, с тем исключением, что st в десятки раз компактнее и быстрее любого другого эмулятора терминала.
Среди инструментов командной строки можно найти следующие:
- lsw — выводит на экран имена всех открытых окон;
- sprop — выводит информацию об окнах;
- sselp — извлекает и печатает скопированную строку;
- svkbd — полноценная виртуальная клавиатура;
- swarp — перемещает указатель мыши в заданное место;
- wmname — позволяет указать любое имя менеджера окон;
- slock — простой блокиратор экрана;
- xssstate — печатает текущее состояние скринсейвера.
Системные инструменты
Разработчики suckless не ограничиваются только графическим софтом. С недавнего времени проект ведет активную разработку системных инструментов, центральное место среди которых занимают пакеты утилит sbase и ubase. Первый содержит UNIX-утилиты, описанные в стандарте POSIX. Это те самые cat, echo, ls, du, sed и прочее. Все они написаны с нуля и гораздо проще и компактнее, чем аналоги из пакета coreutils, который уже давно упрекают за раздутость и чрезмерную сложность.
Ubase, в свою очередь, — это набор специфичных для Linux утилит, которые не описаны в POSIX и используют доступные только в Linux системные вызовы и интерфейсы. Сюда входят mount/umount, insmod, lsmod, uptime, su и многие другие утилиты, традиционно доступные в пакете util-linux. И конечно же, они намного проще своих аналогов.
Также у suckless есть собственный вариант демона udev, который занимается автоматическим созданием файлов-устройств в каталоге /dev. Здесь он разделен на два компонента: smdev и nldev. Они оба представляют собой замену демону mdev, который в свое время сам пришел на смену udev, когда последний был включен в состав systemd.
Ну и конечно же, у suckless есть собственный демон инициализации sinit и система управления запущенными сервисами svc. Они позволяют загрузить, инициализировать систему и запустить все необходимые для ее корректной работы компоненты. По сути это старая добрая система управления инициализацией в стиле BSD.
Stali
Собираем все перечисленное выше в одну кучу, добавляем ядро и получаем минималистичный и очень быстрый дистрибутив Linux под названием stali, или Static Linux. Планы создания такой системы обсуждались в сообществе suckless много лет, но только недавно у проекта появились все необходимые компоненты для сборки пазла в единое целое.
Stali — довольно необычный дистрибутив, и не только потому, что базируется на простых и быстрых компонентах и пропагандирует сквозную простоту и минималистичность, но и благодаря многим другим чертам. Так, stali полностью игнорирует стандарт файловой иерархии FHS: здесь нет каталога /usr и всех его подкаталогов, нет каталога /sbin, но зато есть каталог /sucks, в который предлагается сваливать весь «плохой», тяжеловесный и раздутый софт. Также в stali нет пакетного менеджера. Устанавливается и обновляется дистрибутив с помощью Git, а дополнительные пакеты, судя по всему, не предусмотрены.
Однако самое важное: stali использует статическую компиляцию для всего предустановленного софта. Другими словами, здесь нет динамически разделяемых библиотек, каждое приложение и каждый инструмент самодостаточны и не зависят ни от чего. В этом одновременно и преимущество, и недостаток дистрибутива. Статическая компиляция позволяет решить многие проблемы с безопасностью, с разобщенностью версий зависимых библиотек, сделать управление приложениями более простым. С другой стороны, она же создает большой оверхед, так как загруженные в память приложения, использующие одну и ту же библиотеку, будут дублировать ее в памяти вместо того, чтобы использовать один экземпляр библиотеки. Впрочем, насчет недостатков у разработчиков есть контраргументы, да и, если учесть, какой конкретно софт планируется поставлять в составе дистрибутива, проблема оверхеда его почти не коснется.
На данный момент дистрибутив находится в начальной стадии развития. Подготовлен ISO-образ, включающий в себя системные инструменты и утилиты, а также утилиту parted для разбивки диска, Git для установки системы. Однако как таковой ОС еще нет. Планируемые к включению в дистрибутив dwm, dmenu, st, surf и другие графические приложения еще не интегрированы в него, а установить сам дистрибутив без использования другой Linux-системы невозможно.
Тем не менее если разработчики доведут систему до юзабельного состояния, то это будет очень интересная система, этакий Tiny Core Linux для гиков. Так что будем следить за развитием.
Сайт suckless.org создан с использованием фреймворка werc, который написан на языке командного интерпретатора rc из Plan 9. Он представляет собой несколько простейших скриптов, которые собирают куски HTML-кода в набор для публикации веб-страниц. Ядро werc насчитывает всего 150 строк кода.
Выводы
Во многом suckless — это, конечно же, проект класса Proof of concept, и примерно об этом его создатели говорят в своем манифесте. С другой стороны, эти ребята написали множество приложений, которыми ежедневно пользуются тысячи человек по всему миру. Автор данных строк сам оценил удобство dmenu, st, surf и уже не может представить себе жизни без этого софта.
Suckless должен быть интересен любому программисту, ведь это пример того, как можно писать удобный и качественный софт, не выходя за границы всего нескольких тысяч строк кода. Как говорят ребята из проекта: «Гениальные идеи просты. Гениальное программное обеспечение — простое. Простота — это сердце философии UNIX. Чем больше строк кода вы удалили, тем дальше вы продвинулись. Чем меньшее количество строк кода остается в вашем программном обеспечении, тем более опытным вы становитесь и тем меньшим калом будет ваше ПО».