среда, 20 марта 2013 г.

Книга "QNX/UNIX - анатомия параллелизма"

Небольшое дополнение в тему...

На сайте Либрусек я обнаружил страничку с некоторыми своими публикациями. Там лежит, в том числе, и PDF вариант этой, обсуждаемой ранее, рукописи "Модули ядра Linux" ... наверное, достаточно старая редакция, но, может, кому удобнее читать в PDF?

Но главное, из-за чего я помещаю это сообщение: там же лежит в формате DJVU моя книга "QNX/UNIX - анатомия параллелизма" , выходившая году в 2006-м в С.-Петербурге в издательстве "Символ-Плюс". Её материал сильно перекликается с тематикой ядра и модулей Linux (QNX в названии не должно смущать). Поэтому считаю целесообразным указать на место для бесплатного скачивания книги.




P.S. То, что подсказано комментариями (но комментарии не видны явно): архив (.tgz) к книге "QNX/UNIX - анатомия параллелизма" не лежит по URL, который указан в тексте книги (это уж недосмотр издателей). Мне об этом неоднократно писали, поэтому, вместо того, чтобы указывать правильный адрес на сайте издательства (который я не помню и его приходится каждый раз искать), я выложил этот архив в нескольких местах для свободного доступа. Одно из таких мест - вот здесь, в обсуждении, в качестве прикреплённого к сообщению файла.

среда, 30 января 2013 г.

Драйверы и модули ядра Linux (обновление)

Обновлены текст и архив примеров рукописи книги "Модули ядра Linux". Исправлены ошибки и существенно дополнены разделы относительно реализации стека сетевых протоколов. Последняя редакция обозначена как редакция 170.

Скачать новые текст и архив примеров к нему можно:

- на Google:
Это сам текст (в формате OpenOffice), и архив примеров к нему.

суббота, 8 декабря 2012 г.

SNMP управление

Много раз приходилось слышать: "Нет нормальных ни примеров ни описаний по построению SNMP управления сетевыми устройствами". А между тем, SNMP - это общепринятый механизм сетевого управления, рекомендуемый для повсеместного использования.

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

- на Google:
текст описания + архив примеров

Обсуждения, которые подтолкнули к написанию настоящего обзора, можно найти на форуме Протокол SNMP в POSIX-операционных системах. Возможно, там остались нюансы, не затронутые в итоговом тексте.

P.S. Скорее всего, это текст (с адекватным ему архивом примеров) будут ещё расширяться. В любом случае, для определённости, станем считать эту редакцию - 1.05. При последующих улучшениях, если таковое случится, я буду выкладывать изменения с ссылкой на этот номер редакции.


вторник, 4 декабря 2012 г.

Драйверы и модули ядра Linux

Ещё один вариант этого же материала по модулям ядра Linux, о котором шла речь в предыдущих сообщениях, последовательно выкладывается на русскоязычном сайте IBM Developer Works. Здесь изложение представлено как последовательность коротких статей, каждая из которых посвящена отдельному вопросу. Этот вариант удобнее для чтения, особенно когда интерес представляет не весь текст в полном объёме, а отдельные тематические главы.

На сегодня выложено 35 статей, и подготовлено к публикации ещё, как минимум, 30. Полный список статей относящихся к этому циклу, как он выглядит на текущий момент, публикаторы из IBM выкладывают отдельной страницей. Этот список можно рассматривать как линейное оглавление всего выложенного текста.

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

Одним словом, если кому то удобнее такой вариант для использования, то для тех я показываю на него ссылки.

среда, 28 ноября 2012 г.

Драйверы и модули ядра Linux

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

Поэтому сразу же выкладываю ссылки на исправленную и обновлённую редакцию рукописи:

на Google:
Это текст.

Как видите, поменялся только текст, архив кодов остаётся неизменным.

Кроме исправлений, текст несколько расширен теми дополнениями (по мелочам), которые накапливались, и нужно было внести раньше, да оказии не случалось. Так что текст исправлен и расширен: лучше не полениться скачать, и пользоваться именно этой редакцией:
редакция 3.168
27.11.2012г. 
Страниц 374.

воскресенье, 25 ноября 2012 г.

Инструменты Linux

Ещё одна рукопись книги + иллюстрирующие к ней примеры программ. В самом тексте рукописи заглавие записано так: «Инструменты Linux для Windows-программистов». Это не совсем соответствует действительности ...

Текст этот начал писаться для профессиональных коллег программистов (по их просьбе), работавших обстоятельно с проектированием встраиваемых устройств, с изрядным опытом, но не сталкивающиеся с операционной системой Linux. Задача была в том, чтобы набросать краткие заметки только об отличительных сторонах работы в Linux. Чтобы можно было "въехать" в практическую работу в максимально сжатые сроки.

Ну а позже текст стал расширяться, "обрастать мясом", и получилась вот такая рукопись. Название «Инструменты Linux для Windows-программистов» - это, конечно, крайне неудачно.  Windows здесь подвернулся только тем, что большинство практикующих программистов всё-таки вышли из WIndows. С равным успехом этот текст можно было назвать «Инструменты Linux для программистов из Solaris», или «Инструменты Linux для программистов UNIX», или «Инструменты Linux для программистов на PASCAL» - т.е. для всех тех, для кого не являются проблемными вопросы разработки программ вообще, кому не нужно растолковывать элементарные понятия из этой области, но кого смущают некоторые непривычные детали именно при работе в Linux.

Кроме того, по ходу расширения рукопись "накрыла", как мне кажется, часть вопросов, которые будут интересны сетевым и системным администраторам.

А как оно получилось - смотрите сами... Взять и текст и архив примеров к нему можно:

на Google:
Это сам текст (в формате OpenOffice), и архив примеров к нему.

В этой последней редакции это должен быть текст: редакция 2.70от 28.10.2012 г., страниц 170.


суббота, 24 ноября 2012 г.

Драйверы и модули ядра Linux

Рукопись книги «Модули ядра Linux» и, особенно, примеры к ней в архиве существенно дополнены. Новые редакции выложены для общего доступа:

на Google:
Это сам текст (в формате OpenOffice), и архив примеров к нему.

Теперь это должен быть текст (если ничего не напуталось): редакция 3.167 от 24.11.2012 г., страниц 372.

понедельник, 19 ноября 2012 г.

Драйверы и модули ядра Linux

Ещё относительно недавно программированием модулей ядра для Linux мало кого занимало. Во многом это было обусловлено и тем, что отсутствовала достаточная информация по вопросу. Когда я начал заниматься этим занятием, по необходимости, в реальных проектах (а было это где-то году в 2005-м), то оказалось, что из публикаций на то время в мире существовало два обстоятельных источника:



Самая старая, небольшая (112 стр.), очень известная и популярная книга, изданная, в том числе, и в переводе на русский язык: Ори Померанц, «Ядро Linux. Программирование модулей», издана в 2000 г. изд. Кудиц-Образ (ISBN 5-93378-008-1). Этот текст многократно растиражирован в сети, его неоднократно пытались адаптировать к последующим версиям ядра другие авторы, но дело не пошло дальше ядер 2.4.






Очень обстоятельное, но местами изрядно путанное, изложение от группы авторов Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman: «Linux Device Drivers» (1-я редакция - 1998г., 2-я редакция - 2001г., 3-я редакция - 2005г., ISBN: 0-596-00590-3). Этот текст также правился от редакции к редакции, но также не пошёл в описаниях дальше ядра 2.6.10. В сети выложен достаточно хороший полный перевод книги на русский язык: в формате для чтения, или для сохранения в PDF. Доступен полный архив кодов примеров к книге (архив лежит на самом сайте издательства O'Reilly, издавшего книгу, но находят его с трудом: авторы в самой книге не указали ссылку на архив, ни даже вообще не упомнили о его наличии). Оригинал книги может быть скачан здесь.





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





Sreekrishnan Venkateswaran, «Essential Linux Device Drivers», Prentice Hall, 2008, стр.714. Ядро (согласно аннотации автора) до 2.6.23/2.6.24 включительно. Создан отдельный авторский сайт книги (откуда и взят вид обложки), и где могут быть взяты полные примеры программного кода к книге.









2-х томник одного из непосредственных участников команды разработки ядра Linux: Jerry Cooperstein, «Linux Device Drivers», 2009. 1-й том «A guide with exercises», стр. 372 - как понятно и из подзаголовка, это описательная часть, разбитая по темам.








Том 2: «Lab Solutions», стр. 259 - это параллельная 1-му тому лабораторная часть, иллюстрирующие примеры кода. Полный архив кодов доступен для скачивания свободно доступен здесь, что примечательно, что примеры кода обновляются автором регулярно, и последний (на сегодня) архив (13-Apr-2012) откорректирован под версию ядра Linux 3.3.






Оригиналы большинства изданий вы сможете найти и свободно скачать по ссылке к подборке материалов по ядру Linux. Там же можно взять для изучения одно из лучших изданий по 2-й из названных категорий (собственно по архитектуре ядра, не по модулям):




Wolfgang Mauerer, «Professional Linux Kernel Architecture», 2008, 1370 стр.









И тем не менее (при недостаточной освещённости), техника программирования модулей ядра Linux заметно проще, чем можно было бы ожидать, или же, сравнительно, чем техника написания драйверов во многих других, более ранних операционных системах (MS-DOS, Windows ...) и может быть использована с большой пользой не только для драйверов реальных устройств, но и для более широких классах задач (например, сетевых подсистем и протоколов, или разнообразных псевдоустройств самой широкой функциональности). 

Поэтому, когда мне предложили подготовить и прочитать учебный курс по этому предмету для сотрудников одной из крупнейших международной компании по разработке программного обеспечения Global Logic, это не могло не вызвать встречного энтузиазма и интереса. Такой курс был сделан, и "прокатан" на нескольких учебных группах. Позже материалы курса были значительно расширены (до 2-х - 3-х раз по объёму) и дополнены соответствующими примерами. Так возник проект книги...

Для тех, кого может заинтересовать техника программирования модулей ядра, показываю общедоступные ссылки где я выложил результаты этой работы (последние результаты, они ещё дополняются)...

на Google:
Это сам текст (в формате OpenOffice), и архив примеров к нему.

В первоначальном (и представленном) варианте текста полностью отсутствует раздел относительно программирования драйверов блочных устройств. Я до сих пор уверен, что программирование именно блочных устройств является частной, редко востребованной работой, свойственной, главным образом, самим разработчикам новых моделей таких накопительных устройств (вот пусть они и разрабатывают!). Тем не менее, ко мне, вопреки ожиданиям, несколько раз обращались разработчики с проблемами именно по таким устройствам. В итоге, новый большой раздел относительно блочных устройств был написан, а примеры к нему созданы, отлажены и выверены. Пока это совершенно сырой отдельный текст, не вошедший в общий объём книги. Но и он может быть взят здесь на рассмотрение. В самое ближайшее время этот материал будет ещё дополнен, и включен в общий текст книги (и, соответственно, примеры). Как только это произойдёт, я добавлю сюда в блог ссылки на обновлённый вариант.


(эта страница находится в правке, так что не обессудьте!)

среда, 31 октября 2012 г.

Заметки о systemd, часть 6, xinetd

Об этой возможности systemd нужно написать особо и обязательно. Это тот механизм, который авторы systemd называют сокет-активация: запуск служб динамически, по требованию сетевого подключения снаружи. Это в точности то, что выполняют inetd и xinetd.

Есть такой PDF-документ (я не знаю оригинала цельным текстом, похоже, что отдельные главы разбросаны статьями в личном блоге Леннарта Поттеринга, а переводчиком собраны в единый текст), назван "systemd для администраторов":
Lennart Poettering (автор)
Сергей Пташник (русский перевод)
17 июля 2012 г.
И есть там такая глава: "11. Службы с активацией в стиле inetd". С неё и начнём изучение вопроса. Несколько вводных цитат:
Уже многие годы inetd считается одной из базовых служб Unix-систем.
...
Наиболее популярные из них — BSD inetd и xinetd. Хотя inetd во многих дистрибутивах до сих пор устанавливается по умолчанию, сейчас он уже редко используется для запуска сетевых служб
...
Одной из ключевых возможностей systemd (а также launchd от Apple) является сокет-активация — тот же самый механизм, давным-давно реализованный inetd,
...
Тем не менее, systemd ничуть не хуже inetd может запускать службы в ответ на входящие сетевые соединения.
Автор в описаниях показывает запуск сокет-активируемой службы SSH, проверить это "в натуре" я предполагаю, для начала, не отступая от его рекомендаций. Поэтому я сначала, для аналогий, подготовлю запуск такой службы средствами xinetd. Создаём новый конфигурационный файл вот с таким примерно содержимым:
# cat /etc/xinetd.d/my-sshd
service ssh
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/sshd
server_args = -i
}


Остановим все службы, которые могли бы представлять сервис SSH, и убедимся, что запросы SSH не обслуживаются (их некому обслуживать):
# systemctl stop sshd.service
# systemctl status xinetd.service
$ ssh 192.168.1.5

ssh: connect to host 192.168.1.5 port 22: Connection refused


Вот теперь мы можем запустить суперсервер xinetd и убедится, что в такой конфигурации он обеспечивает поддержку SSH:
# systemctl start xinetd.service
$ ssh 192.168.1.5olej@192.168.1.5's password:
Last login: Fri Oct 5 23:07:20 2012 from notebook.localdomain
$ who
olej :0 2012-10-24 16:40 (:0)
olej pts/0 2012-10-24 16:41 (:0.0)
olej pts/2 2012-10-24 17:10 (:0.0)
olej pts/4 2012-10-24 17:16 (:0.0)
olej pts/6 2012-10-24 17:26 (:0.0)
olej pts/8 2012-10-24 18:18 (:0.0)
olej pts/9 2012-10-24 19:35 (notebook.localdomain)


А это то, как запуск SSH для этой сессии выглядел в системном журнале:
# tail -n2 /var/log/messages
Oct 24 19:35:28 notebook xinetd[4587]: START: ssh pid=4606 from=::ffff:192.168.1.5
Oct 24 19:35:35 notebook systemd-logind[642]: New session 5 of user olej.

Это всё были вещи достаточно общеизвестные, но нужные нам для сравнения с альтернативной возможностью: использование для той же цели сокет-активация в systemd.

А теперь, освежив в памяти как оно работает, переходим к активации той же службы SSH средствами systemd (вместо использования xinetd). Пока мы работаем со службой SSH будем в точности следовать рекомендациям упоминаемой выше главы 11. Создаём и заполняем 2 файла (sshd.socket и sshd@.service), содержимое их легко понятно по аналогии с обсуждавшимся выше /etc/xinetd.d/my-sshd :
# touch sshd.socket
# touch sshd@.service
ls -l *ssh*
-rw-r--r--. 1 root root 283 апр. 6 2012 sshd.service
-rw-r--r-- 1 root root 106 окт. 25 14:52 sshd@.service
-rw-r--r-- 1 root root 128 окт. 25 14:50 sshd.socket
$ cat sshd.socket
[Unit]
Description=SSH Socket for Per-Connection Servers
[Socket]
ListenStream=22
Accept=yes
[Install]
WantedBy=sockets.target
$ cat sshd@.service
[Unit]
Description=SSH Per-Connection Server
[Service]
ExecStart=-/usr/sbin/sshd -i
StandardInput=socket

Перед проверкой работоспособности обязательно убеждаемся, что у нас не запущен автономный сервер sshd или xinetd :
# service sshd stop
$ service sshd status

Redirecting to /bin/systemctl status sshd.service
sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
Active: failed (Result: exit-code) since Thu, 25 Oct 2012 12:38:10 +0300; 2h 18min ago
Process: 758 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=255)
Process: 749 ExecStartPre=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/sshd.service
$ ps -A | grep xinetd
756 ? 00:00:00 xinetd
# service xinetd stop
Redirecting to /bin/systemctl stop xinetd.service
$ service xinetd status
Redirecting to /bin/systemctl status xinetd.service
xinetd.service - Xinetd A Powerful Replacement For Inetd
Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled)
Active: inactive (dead) since Thu, 25 Oct 2012 15:02:19 +0300; 10s ago
Process: 750 ExecStart=/usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid $EXTRAOPTIONS (code=exited, status=0/SUCCESS)
Main PID: 756 (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/xinetd.service


Вот теперь, когда мы поместим оба предложенных выше файла в каталог /etc/systemd/system, мы можем запустить его (то есть активировать в текущем сеансе работы):
# systemctl start sshd.socket
# systemctl status sshd.socket
sshd.socket - SSH Socket for Per-Connection Servers
Loaded: loaded (/usr/lib/systemd/system/sshd.socket; disabled)
Active: active (listening) since Thu, 25 Oct 2012 15:07:29 +0300; 6s ago
Accepted: 0; Connected: 0
CGroup: name=systemd:/system/sshd.socket

Для проверки делаем 2 отдельных подключения (сеансов SSH), 1-е из показанных - удалённое, а 2-е - локальное:

$ ssh 192.168.1.5
The authenticity of host '192.168.1.5 (192.168.1.5)' can't be established.
RSA key fingerprint is 45:32:32:17:bd:6f:9c:d5:19:09:d0:fa:e2:06:bb:41.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.5' (RSA) to the list of known hosts.
olej@192.168.1.5's password:
Last login: Thu Oct 25 14:57:15 2012 from localhost.localdomain
-bash-4.2$ cat /etc/system-release
RFRemix release 17 (Beefy Miracle)

$ ssh localhost
olej@localhost's password:
Last login: Thu Oct 25 15:09:33 2012 from atom

Как видно, оба сеанса SSH работоспособны, хотя предварительно (до вызова) сервер sshd и не был запущен (мы это предварительно проверили) ...
$ ps -A | grep ssh
4555 pts/6 00:00:00 ssh
4563 ? 00:00:00 sshd
4565 ? 00:00:00 sshd
4669 pts/3 00:00:00 ssh
4670 ? 00:00:00 sshd
4673 ? 00:00:00 sshd

А вот одно из самых интересных следствий - активные экземпляры служб, соответствующие открытым сеансам, обладают динамически образуемыми именами:
$ systemctl --full | grep ssh
sshd.service loaded failed failed OpenSSH server daemon
sshd@0-192.168.1.5:22-192.168.1.7:47966.service loaded active running SSH Per-Connection Server
sshd@1-127.0.0.1:22-127.0.0.1:56938.service loaded active running SSH Per-Connection Server
sshd.socket loaded active listening SSH Socket for Per-Connection Servers

Ну вот и всё.
Этого вполне достаточно, чтобы утверждать, что всё совершенно успешно работает.

вторник, 23 октября 2012 г.

Заметки о systemd, часть 5, документация

Документация и публикации


По systemd очень мало толковой документации (или, может, это мне так не везёт?). То есть понаписано о systemd - множество, за такой короткий срок существования проекта. Но понаписано это множество, преимущественно, единственным автором: Леннартом Поттеринга, самим автором проекта. И если о качестве программ, которые создаёт Леннарт Поттеринг есть разные противоречивые мнения, спорят и обсуждают, то уровень документации, которую он же пишет, должен квалифицироваться однозначно: "совершенно бездарно". Точнее, пишет он, возможно, и очень даже неплохо, но пишет он рекламные проспекты... по принципу: "с утра сам себя не похвалишь - весь день как оплёванный ходишь" ... выдаёт желаемое за действительное, задуманное за реализованное, и аргументирует очень сомнительного качества преимущества там, где видятся недостатки...

Но жить то как-то с systemd приходится? А жить без технической документации нельзя - что это за жизнь? Поэтому я в этой части буду составлять подборку ссылок на значащие публикации относительно systemd. Из этих ссылок те материалы, которые написаны самим Леннартом Поттерингом я ... буду выделять вот таким цветом, чтобы читатель сразу был готов это "разделить на 3".

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

Техническая документация

17 июля 2012 г., 58 стр.
Автор: Lennart Poettering
Русский перевод: Сергей Пташник
Оригиналы глав в блоге автора:  http://0pointer.de/blog
Начнем с небольшого исторического экскурса. Каталог /etc/sysconfig появился в
дистрибутивах Red Hat и SUSE задолго до того, как я присоединился к этим проектам — иными словами, это было очень давно. Некоторое время спустя, в Debian появился аналогичный по смыслу каталог /etc/default.
Мне показался очень любопытным этот пассаж в тексте: "... это было так давно, ещё до того, как Леннарт Поттеринг присоединился к проектам, поэтому это может быть выброшено из ...".


23 сентября 2012 г.
Wiki страница OpenSUSE
cgroups — это контрольные группы распределяющие между процессами ресурсы и позволяющие осуществлять контроль, приоритизацию и управление системными ресурсами. Контрольные группы организованы иерархически, где каждый процесс помещается в группу с именем родителя, породивший этот процесс. Это позволяет установить точное происхождение определенного процесса.
systemd-cgls — это утилита, позволяющая наглядно оценить принадлежность группы процессов к их службам или процессов вошедших в сеанс пользователя с помощью регистрации пользовательских сессий

Публикации в тему 


Это одни из первых сообщений о существе проекта:


Система инициализации Systemd. Часть I
1 сентября 2010 г.
Автор: Lennart Poettering
Поэтому налейте себе чашечку кофе, садитесь и читайте о том, что грядет.
История долгая, а для тех, кто не хочет читать целиком, скажу вкратце: мы экспериментируем с новой системой инициализации, и это весело!

Система инициализации Systemd. Часть II
3 сентября 2010 г.
Автор: Lennart Poettering
Кто основные разработчики?
Большая часть кодовой базы - моя собственная работа, Lennart Poettering (Red Hat). Однако, общий дизайн и его отдельные детали - это результат моего взаимодействия с Kay Sievers (Novell). Также в проекте участвуют Harald Hoyer (Red Hat), Dhaval Giani (бывший сотрудник IBM), и многие другие из таких компаний как Intel, SUSE and Nokia.


Независимые мнения:


Systemd’ова болезнь
2 июля 2012 г.
Автор: Алексей Федорчук
Я, конечно, не врач, но, кажется, совершил медицинское открытие: открыл совершенно новую болезнь. Поражает избирательно, только тех, кто тем или иным образом связан с разработкой systemd и сопряжённых служб. Но зато, похоже, с вероятностью, близкой к стопроцентной…
Симптомов этой болезни пока выявляется три. Первый симптом — не-чтение ранее написанного, выраженное в хронической форме. Типичную клиническую картину этого можно видеть знаменитом Откровении Леннарта Поттеринга, которое под именем systemd Optimizations не так давно обошло всю сеть (имеется и в русском полупереводе-полупересказе).
Второй симптом — безудержное восхваление всего, что хоть каким-то боком связано с systemd.

systemd и штрих-коды: созданы друг для друга…
9 октября 2012 г.
Автор: Алексей Федорчук
Вслед за этим Петер Робинсон (Peter Robinson) высказался в том смысле, что хорошо бы иметь возможность отказаться от установки компонентов, которые пользователь полагает необязательными.
На это Леннарт ответил, что он и сам всей душой за возможность минимальной инсталляции, и готов делать всё в этом направлении, но хотел бы всё оставить по прежнему.
...
Пара слов в заключение. Быстро, однако, прошла та пара-тройка лет, когда Fedora, казалось, действительно была повёрнута лицом к пользователю. Или это просто казалось тем, кто применял её отечественный вариант — RFRemix? Ныне она, увы, вернулась на круги своя: быть кружком юных техников, результаты которых потом используют (или не используют) взрослые дяди из корпоратива.