Изначально этот пост должен был стать брюзжанием по поводу известных идей вида: «а давайте впихнём в Bash объекты вместо УсТаРеВшЕгО текста и добавим поддержку картинок с GIF-ками в вывод команд».

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

Как я пришёл к Linux’у

Началось всё весьма прозаично — мне купили первый компьютер и от знакомого «компьютерщика», который объяснял мне как им пользоваться — я услышал о том, что есть ещё какая-то операционная система под названием «Linux» для программистов и хакеров. Это отложилось где-то в глубинах моей памяти — в те времена у меня не было доступа к Интернету, кроме модемных 56 kB/s в школе, к которым я имел доступ лишь раз в 1-2 недели. Поэтому скачать дистрибутив для записи на CD-болванку я не мог, да и не знал тогда, что его можно было скачать в Интернете. Дистрибутив Windows я получил от того самого компьютерщика, а другие диски изредка брал в прокате. Естественно, никаких линуксов там не водилось — только репаки GTA, Half-Life и прочая золотая классика.

В те времена я сидел на Windows XP и занимался в основном тем, что играл с ботами в Counter-Strike, да проходил разные знаменитые синглплей-игры. Программировать на Паскале я уже умел и у меня был дистрибутив Turbo Pascal, скопированный на дискету в школе. Естественно, он запускался в полноэкранном режиме, потому что это выглядело круто! Как в фильмах про хакеров, где люди делали какую-то магию, печатая непонятный текст.

Вся эти идиллия так и длилась бы, но через пару лет я увидел на полке книжного магазина книгу «Slackware/MOPSLinux для пользователя (с диском)». Естественно, быстро и решительно я уговорил своего деда купить её. Поскольку компьютер был в моём единоличном пользовании, а переустанавливать Windows и делать бекапы (модов для CS 1.6 и своих сохранений для GTA Vice City) я уже умел — пришло время ээээкспериментов! У меня было два CD-диска с дистрибутивами Linux и Windows, семьсот пятьдесят man-страниц, 150 листов книги-самоучителя по консольным командам и гора консольных утилит в /bin и /usr/bin, один жёсткий диск на 40 Gb, Xorg -configure, создающий нерабочий /etc/X11/xorg.conf, и текстовая 80x25 консоль. Не то чтобы всё это было нужно, чтобы стать крутым хакером, но раз уж начал копаться во внутренностях системы, то иди в своём увлечении до конца. Единственное, что меня беспокоило — это fdisk. В мире нет ничего более беспомощного, безответственного и безнравственного, чем школьник, использующий fdisk для разметки диска. И я знал, что довольно скоро мы в это окунёмся.

Поначалу я просто читал книгу и разбирался с консольными командами. После Windows это было офигенно — ты печатаешь какой-то текст, а система тебе отвечает, прямо как фильмах. А не просто рисует песочные часы и непонятно что делает. Спустя какое-то время я научился выходить из vim, настроил вручную X-сервер по man-страницам и смог установить компилятор Паскаля, на котором я продолжал учиться программировать по ИТМОшному учебнику. Потом разобрался с тем как компилировать программы из исходников, которые я получал на дисках от журнала ][akep.

Естественно, Windows XP оставалась у меня в дуалбуте. Подавляющее большинство используемого мною софта было под Windows, с поддержкой DOC и XLS файлов в Linux в те времена было плохо, да и без игр серии GTA было скучно. А учитывая отсутствие доступа к интернету, я не мог придумать, что же ещё делать с Линуксом — KDE 2 3 установил, все программы с диска MOPSLinux перепробовал, главы про DNS и HTTP-сервер из книги я зачитал до дыр, но не видел смысла применять их на localhost’е.

Оглядываясь назад, могу сказать что полученные знания и умения стали базой, которую я использую до сих пор. Оказывается, очень полезно оказаться один на один с Linux’ом, когда тебе доступны только книжка, man-страницы и исходники программ, которые ты хочешь установить — нет ни интернета, ни знакомых, у которых можно спросить. Это позволяет многое узнать о системе и наработать навыки решения разнообразнейших проблем.

Сейчас, если какой-то старый как говно мамонта, но очень нужный legacy софт отказывается запускаться — то это его проблемы. Расчехляем ldd, делаем симлинки на нужные версии библиотек, читаем логи. Если программа тихо падает — натравливаем на неё strace. Если бы этих умений с той поры у меня не было — не представляю сколько бы времени я потратил на работе и в пет-проджектах на запуск какого-нибудь не самого «modern» и «right from future» бизнес-софта.

Период красноглазия

Где-то в 2007 году я поступил в ИТМО и переехал в Петербург. Так у меня появился доступ к огроменным (по сравнению с тем, что я видел раньше) книжным магазинам — Дом Книги на Невском и ДВК (Дом Военной Книги). Поскольку к тому моменту я уже был индоктринирован журналом ][akep — с полок были сметены:

  • «Linux в подлиннике» от издательства БХВ
  • «Разработка приложений в среде Linux» от издательства Williams Publishing (фотография диска с MOPSLinux выше как раз на фоне страниц из этой книги)
  • «Язык программирования Си» Ритчи и Кернигана.

Поскольку интернет на тот момент у меня был по dial-up, по карточкам, то использовал я его редко. В основном, чтобы заходить на de.ifmo.ru, да скачивать книги с Библиотеки Мошкова (Lib.Ru). При попытке сделать что-то большее время на карточке кончалось, мой Acorp Sprinter@56K клал трубку и приходилось снова бежать на почту за новой карточкой.

Поэтому я опять таки как и раньше сидел за книгами, изучал системные вызовы, да писал всякие учебные программки.

Привычный нам в современном понимании безлимитный интернет появился у меня где-то в районе 2009-2010 года. И вот тогда всё понеслось — я мучал жёсткий диск своего компьютера, устанавливая туда разнообразные дистрибутивы. В основном, выбирал я их по следующему принципу: «О, какая тут красивая графическая оболочка — срочно ставим!»

С того времени у меня сохранилось лишь три скриншота. Тут я копаюсь в Cишном коде в GVim, обвешанном плагинами (оконный менеджер FluxBox):

А тут какой-то код на GNU Assembler:

Тогда же я освоил LaTeX, устав от проблем с печатью лабораторных отчётов, когда файл сделанный в Open Office, криво печатался в книжном, рядом с университетом. А так я наконец-то мог написать текст отчёта в vim и получить на выходе красивый PDF, который выглядит и печатается одинаково везде.

Ну и продолжал осваивать системное программирование. Одна из первых написанных мною программ до сих пор лежит в SVN-репозитории на SourceForge. Это jabsh (https://sourceforge.net/p/jabsh/code/HEAD/tree/) — что-то вроде jabber remote shell. Возможности получить статический IP-адрес у меня тогда не было, а сделать что-то на своём компьютере удалённо хотелось. В то время у меня был Siemens C75 с установленным Jabber-клиентом Bombus, в котором я чатился во всяких линуксовых конференциях на jabber.ru, когда под рукой не было компьютера. И тут мне пришла в голову идея написать демона, который будет подключаться к Jabber-серверу, ждать от меня консольные команды, выполнять их и посылать результат выполнения в обратном сообщении.

Эта штука даже работала и я ей пользовался, пока не получил статический IP-адрес. У меня даже был пользователь из Индии, у которого jabsh почему-то не собирался и мы с ним какое-то время переписывались по этому поводу.

Ещё одна из программ из тех времён — проект на лето от моего будущего научного руководителя — termprogs, для управления набором «терминалов» через «АРМы», с центральным сервером, куда всё это дело подключается.

Как раз к этому моменту я заканчивал читать книгу Уильяма Стивенса «UNIX: Разработка сетевых приложений» и мог на практике поприменять все свои знания по системному программированию.

Regexp 101 в ИТМО

Где-то на 2-3 курсе в университете начались пары по системному программированию. Сначала нас обучали пользоваться терминалом и vim на тонких клиентах от Sun Microsystems, с пузатыми ЭЛТ-мониторами. На этих парах я целый семестр пинал балду и не приходил в сознание — ведь всё это я уже изучил ещё в школьные времена. А вот потом началось самое интересное.

Половина семестра у нас были отведены на изучение регулярных выражений и grep’а, sed’а и awk. А регулярные выражения прошли мимо меня и grep’ом я пользовался на уровне: «ну, если ему параметром передать строку, то он будет искать по ней совпадения в файле».

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


До сих пор не понимаю, откуда пошла эта идея, что «если вы решаете проблему и решили использовать регулярные выражения — то теперь у вас две проблемы». Мой опыт на работе и дома показывает, что если нужно как-то хитро разобрать строку регулярным выражением, то ты берёшь sed или Java’овские Pattern и Matcher — и разбираешь строку. Потом тестируешь получившийся код, отправляешь его тестировщикам — а дальше он просто работает годами.


В то же время я начал делиться своим опытом — писать статьи на welinux.ru, общаться на linuxforum.ru, да захаживать на собрания SPbLUG. Одно время у меня был блог на WordPress’е, который я поднял на каком-то бесплатном VPS, которым можно было пользоваться пока ты не выходил за нижние или верхние лимиты по CPU и памяти. Тогда я и пристрастился к написанию всяких текстов с офигительными историями.

Linux и embedded-программирование

В районе 2011 года я принял роковое решение — пойти в embedded-разработку. В то время эта область Computer Engineering мне казалась более интересной и романтичной, чем «обычное» программирование. Ведь тут нет никаких «упрощающих» уровней абстракции — берёшь и пишешь код, которые работает прямо на железе! А потом отлаживаешь всё это дело при помощи моргания светодиодом, отладочной печати через UART, осциллографа и такой то матери. Зато все знания про биты, байты, внутреннее устройство всяких EEPROM, SRAM и прочих вещей — используются 24/7!

Все соответствующие курсы в университете предусматривали работу под Windows — в то время нужные среды разработки и компиляторы были в основном под эту операционную систему. Но, естественно, меня это не остановило. Для половины софта я использовал VirtualBox с Windows внутри. Для второй половины — можно было спокойно найти нужные нативные инструменты.

Для обучения мы поначалу использовали специальные устройства на базе микроконтроллера семейства MCS-51. Если код для них можно было писать в чём угодно — я использовал Vim/Emacs — то с компиляцией и прошивкой готового бинарника в устройство всё было сложнее. Для компиляции использовался компилятор sdcc, для прошивки же нужна была специальная утилита m3p, написанная одним из университетских преподавателей в незапамятные времена на C. К счастью, эта утилита писалась с оглядкой на кроссплатформенность поэтому, после пары незначительных правок в исходном коде, она спокойно выполняла свою работу и под Linux.

В те времена, начав уставать от всяких «modern» дистрибутивов, которые своими NetworkManager’ами, PsshPsshAudio PulseAudio, Avahi Daemon и прочими «инновациями» — ломали мой пользовательский опыт, наработанный ещё во времена Slackware — я пришёл к Arch Linux. В нём можно было достаточно быстро поставить базовую систему без вышеописанных программ, дополнить её только нужным мне ПО и спокойно работать и смотреть мемы.

Тогда у меня уже начал формироваться определённый набор софта, которым я постоянно пользовался. По понятному стечению обстоятельств (русифицированный Slackware как первый дистрибутив и любовь сидеть в консоли, как «хакер») это был в основном консольный софт:

  • vim/emacs — для редактирования текста и кода.
  • latex — для написания всяких сложных документов, особенно если их нужно распечатывать или куда-то отправлять. Ну и для рисования презентаций, чтобы «два раза не вставать».
  • Какой-нибудь tiling WM — всё равно после месяца пользования каким-нибудь красивым KDE или GNOME я приходил к тому, что у меня все окна по умолчанию раскрыты на весь экран и раскиданы по рабочим столам, в зависимости от имени окна. А раз не видно разницы, то зачем тратить дисковое пространство на тяжеловесный DE, если всё что мне надо я могу получить в каком-нибудь xmonad или i3wm? А всякие красивости в виде теней, анимаций и прозрачности — хоть и радуют глаз первые пару недель, но потом «вау-эффект» ожидаемо теряется.
  • Ну и всякие прочие консольные утилиты, с которыми я мог работать не приходя в сознание: grep, sed, git, make, cron и так далее.

С тех пор у меня и появился отдельный репозиторий с dotfiles, в котором я таскал с системы на систему свои конфигурационные файлы к вышеописанным программам.

Немного скриншотов рабочего стола с тех времён. Тут xmonad на двух мониторах — слева urxvt, справа Chromium:

А тут идёт редактирование отчета по лабораторной работе — слева результат в apvlv, справа TeX-исходник в GVim:

Впоследствии, я много раз пытался перейти на обычный софт с GUI или всякие Web-приложения, но уже не получалось. Либо возможности по его настройке «под себя» были скудны, а некоторые опции и вовсе «прибиты гвоздями». Либо скорость его работы оставляла желать лучшего. Либо просто было неудобно — то фокус при старте приложения не там, где я привык его видеть, то главное окно отображает не ту информацию, что мне привычна, и так далее.

Последней каплей наверное оказался «редизайн» GMail, после которого он стал ещё медленнее чем раньше и ещё более жаден до оперативной памяти. На этом момент у меня сгорело всё, что только может сгореть и я переключился на mutt. К счастью, эта штука не подвержена СаМыМ СоВрЕмЕнНыМ ДиЗаЙнЕрСкИм решениям и её внешний вид не меняется из года в год. Работает она достаточно быстро, запускается увы не так быстро, даже с кэшированием, но это потому, что у меня в maildir’ах вся моя почта с 2009 года (около 47 тысяч писем). Но главное — она не поменяется в один «прекрасный» день по желанию левой пятки главы отдела дизайна из Google.

В целом, Linux постепенно переставал быть для меня какой-то религиозной штукой, вокруг которой ведутся религиозные войны за звание самого rulez’ного дистрибутива. Он начал становиться для меня просто удобной и привычной операционной системой, от которой мне требовалось немногое:

  • Не делать ничего критичного, типа обновления ПО, без моего ведома
  • Обеспечивать работу привычных мне программ
  • Придерживаться FHS 1 и прочих стандартных вещей, которые я узнал ещё со времён Slackware — чтобы если вдруг возникнет какая-то проблема — я мог быстро и спокойно в ней разобраться, понимая, что творится в системе.
  • Не навязывать мне способ хранения моих файлов — всё должно быть отсортировано по каталогам так, как мне удобно, без всяких тегов и звёздочек с рейтингом файла.

Работа и Linux

На своей первой работе, связанной с embedded-программированием, основной системой естественно была Windows 7. Когда нужен был линукс, мы использовали Linux Mint — он просто и без заморочек работал. Ну и ещё на серверах, которых я тоже касался, выполняя всякие задачи по администрированию, был какой-то RHEL (благодаря этим задачам я поднаторел в настройке всяких Web-серверов, серверов баз данных, и ещё в iptables, rsync да bash-скриптах).

Дома у меня на тот момент тоже был установлен Linux Mint — в целом, мне уже было без разницы какой дистрибутив использовать — всё равно я ставлю систему в минимальной «консольной» конфигурации и уже сам поверх доустанавливаю что мне надо, по списку из моего репозитория с dotfiles. Казалось бы, идиллия?

Но тут в среде линуксоидов началось какое-то непонятное шевеление. Сначала в git’е переименовали ветку master на main не из-за технических соображений, а по политическим причинам, относящимся к одной-единственной далекой, заокеанской стране. К счастью, благодаря гибкости консольного ПО, этого ненужного изменения мне удалось избежать:

[init]
  defaultbranch = master

Потом стала популярной замена привычных утилит типа grep или ls на их аналоги, которые либо печатают красивый цветной вывод, либо работают быстрее (правда на тех объёмах данных, который я обычно использую — это ускорение погоды не делало). Одно время я баловался с ними, но впоследствии вернулся обратно к привычным инструментам из coreutils, ради которых не надо вкручивать в свой репозиторий с dotfiles ещё и submodules — чтобы иметь возможность притащить в свою систему очередной supercat, который умеет подсвечивать исходной код в выводе, но при этом его нет в репозиториях дистрибутива. Если мне нужны будут подсвеченные исходники — come on (!), я просто открою файл в текстовом редакторе, а cat пусть просто печатает содержимое файла в stdout, как он делал это десятки лет!

Потом ещё зачем-то начали заменять ifconfig на iproute2 — вроде как, как я слышал, из-за необходимости работать с IPv6 (во FreeBSD, насколько я знаю, просто добавили нужную функциональность в ifconfig и продолжают им пользоваться 🤷‍♂️).

Последней каплей стало использование systemd вместо System-V init или BSD-style init. Безальтернативное запихивание systemd в Debian, а через него и в используемый мною Linux Mint мне не понравилось. Вот уже десяток лет у меня на прямо на подкорке головного мозга записано, что при старте система запускает обыкновенные shell-скрипты из /etc/init.d/ или /etc/rc.d/, их можно подёргать руками прямо из консоли или даже отредактировать как угодно, чтобы понять почему какой-нибудь tao-cosnaming работает не так, как мне хочется и так далее. А тут инопланетная штука, к которой разве что бинарный реестр ещё не прикрутили — бинарные логи старта процесса, которые не посмотреть через less уже есть — и с unit-файлами, которые не обеспечивают и половины той гибкости, что была у shell-скриптов. И ещё и старательно заменяющая собой все привычные мне отдельные программы, которые всегда просто делали своё дело и не беспокоили по пустякам: grub, cron, agetty и так далее.

В этот момент (после, но не вследствие) я уволился со своей работы, связанной с embedded-программированием и пошёл за длинным рублем в кровавый Java-энтерпрайз, с байткодом, shell-скриптами и морем регулярок — всё как я люблю.

Ну а стремясь избежать наступления systemd на мои привычки, я ушёл с Linux Mint на Gentoo.

Выбрал я его потому, что на тот момент это был один из немногих дистрибутивов, который не использовал оный systemd. Вместо него была своя система инициализации (OpenRC), которая весьма и весьма похожа на систему инициализации System V.

Прописал в /etc/portage/make.conf строку:

USE="-systemd unicode -pulseaudio X alsa"

И горя с тех пор не знаю. Эта система стабильно живёт у меня уже 5 лет, спокойно пережила обновление ядра с 4.19.23 на 6.1.57 и просто работает — лишь запускаю обновление раз в месяц, если не забуду, и всё. Подозреваю, что секрет её стабильной работы в том, что я использую максимально простой (как палка-копалка) софт, созданный в незапамятные времена, без всякой инновационности и поддержки одновременного вывода звука на систему 7.1, блютус-наушники в соседней комнате и по сети на планшет. Естественно, что если всё просто и понятно устроено, то оно и не будет ломаться. Ломалось что-то после обновления у меня всего лишь пару раз.

Однажды, разработчики Midnight Commander переименовали конфигурационный файл mc.ext в mc.ext.ini, для единообразия с именами остальных конфигурационных файлов — пришлось его переименовывать и у себя.

Вторая проблема, с которой я сталкивался — как-то раз мейнтейнер бинарного пакета для Firefox забыл слинковать его с библиотеками для ALSA 2 — в итоге в браузере не было звука. Я откатился на прежнюю версию Firefox’а, полез в багтрекер Gentoo заводить новый баг — а он там уже есть и в нём люди активно комментят. Ещё через несколько дней пакет пересобрали правильно и на этом всё.

What I expected and what I got

Это не Winamp, это Audacious :-)

Понятно, что на данный момент, крутым Linux-хакером, коммитящим патчи в ядро на завтрак, обед и ужин — я так и не стал (пока что). Зато, годы копания во всяких консольных утилитах не прошли даром — в итоге я получил более менее стабильную и простую систему, которой я могу пользоваться не приходя в сознание. В которой никто не будет менять интерфейс согласно новым модным веяниям — кроме меня самого, но тут всё весьма консервативно. Последнее, что я глобально менял — перешёл с белой темы оформления на Solarized Light, потому что она оказалась более приятна глазу.

В которой все мои настройки хранятся в git’е и ничего не поменяется без моего ведома. В которой можно делать что хочешь парой строчек в нужном файле и пайпом из нескольких базовых команд, например:

  • Утилита для plain-text accounting’а не позволяла мне использовать систему «денежных конвертов», как я привык. Взял dialog, awk и sqlite3 и со всем этим сделал поверх hledger’а систему для ведения бюджета, которая делает то, что мне надо.

  • Купил я себе трекбол Logitech Trackman Marble — а на нём есть ненужные мне кнопки «Вперёд» и «Назад», но нет средней кнопки мыши и прокрутки? Не беда.

    Создаём файлик /etc/X11/xorg.conf.d/50trackball.conf со следующим содержимым:

    Section "InputClass"
        Identifier "Marble Mouse"
        MatchProduct "Logitech USB Trackball"
        Option "EmulateWheel" "true"
        Option "EmulateWheelButton" "9"
        Option "MiddleEmulation" "true"
        Option "ButtonMapping" "3 8 1 4 5 6 7 2 9"
        Option "XAxisMapping"  "6 7"
    EndSection
    

    Теперь кнопка «Назад» работает как средняя кнопка мыши, кнопка «Вперёд», если её зажать, позволяет шариком прокручивать текст во всех направлениях. Ну и сам трекбол стал леворуким, как я и хотел.

  • На новой клавиатуре есть Fn-кнопки для вызова «Моего компьютера», поиска и браузера, но нет кнопок для регулирования громкости? Не беда! Расчехляем xmodmap и переназначаем коды кнопок в сгенерированном им файле:

    keycode 152 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
    keycode 163 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
    keycode 180 = XF86AudioMute NoSymbol XF86AudioMute
    

В итоге, Linux сейчас для меня стал просто системой, которая обеспечивает среду выполнения для привычных мне программ — что и составляют привычное для меня пользовательское окружение, как стена состоит из кирпичей. Бастионы — в лице Gentoo и Devuan 3 — пока прикрывают меня от бушующего моря лишних для меня изменений (раз X-сервер у меня прекрасно работает — зачем его менять на Wayland?) и связанных с ними проблем. Пока во всём остальном Linux-мире меняют системы инициализации, выкидывают на мороз X-сервер и переписывают coreutils на Rust — у меня всё тихо и спокойно, можно спокойно читать почту и RSS-ленты в mutt год за годом.

Когда (если) эти бастионы падут — наверное уйду в монастырь на FreeBSD. Благо какой-то опыт работы в ней, с точки зрения простого пользователя, у меня уже есть. Всё моё окружение, в лице i3wm, emacs, Firefox, RawTherapee и прочего ПО, работает и там. Единственные большие изменения в моей конфигурации, которые придётся внести — это в паре мест вызывать gmake вместо make, да в скриптах использовать не привычный she-bang #!/bin/bash, а более правильный #!/usr/bin/env bash. Да, придётся потерять docker, которого сейчас нет во FreeBSD, и возможность работать с LUKS криптоконтейнерами. Но уж лучше потерять их, чем всё своё привычное и любовно настроенное окружение и свои многолетние привычки.

Всю мою историю освоения Linux можно описать как «hard to learn, hard to master». Зато в итоге, год за годом были сформированы всякие разные привычки, которые позволяют писать тексты, пользоваться Интернетом и так далее — буквально «на кончиках пальцев». Именно поэтому я тут не агитирую за то, чтобы вы немедленно переходили на i3wm или Emacs ради пРоДуКтИвНоСтИ — без вышеупомянутых привычек как у меня — это бесполезно. Надо в первую очередь хотеть изучить, например Emacs, быть готовым к тому, что придётся его какое-то время настраивать, не воспринимать это время как «ну вот, надо заниматься настройкой текстового редактора вместо того, чтобы просто открыть его и писать текст» — и тогда что-то получится. А все эти статьи «переходите на Vim, чтобы быть более продуктивным в программировании» — от лукавого. Во-первых, вы потратите время на vimtutor, вместо программирования. Во-вторых, скорость набора текста и программирование слабо связаны. Я печатаю со скоростью всего 60-70 символов в минуту, но на мою продуктивность как программиста — это никак не влияет. Ведь я набираю код на клавиатуре от силы 20-25% рабочего времени. 10-15% времени уходит на общение с коллегами и Zoom-созвоны, чтобы понять, что же имелось в виду в этом таске/баге. И оставшиеся 60-70% — на размышления перед блокнотом с ручкой в руках на тему: «как же тут правильно и быстро сделать изменение, чтобы не тратить много времени ни сейчас, ни в будущем?» Так что vim тут никак не поможет с продуктивностью — думать перед листом бумаги за меня он не будет.

В-третьих, будем честны, на данный момент, для ряда языков, большая и тяжёлая IDE по прежнему является лучшим выбором, чем Vim или Emacs. Даже невзирая на наличие LSP-сервера 4 для вашего редактора. Например, Emacs’овый LSP для Java до сих пор работает не очень хорошо — падает на простых вещах, не обновляет контекст изменений в файлах так быстро, как это делает IDEA, надо творить всякие хитрые заклинания, чтобы он работал с Lombok и так далее.

В целом, ряд действий можно с комфортом для себя сделать в GUI и только в GUI. Проявлять фотографии стоит в RawTherapee, редактировать изображения — в GIMP, смотреть сайт в Firefox’е и так далее. Но для массы других действий — есть куча возможностей делать их «на кончиках пальцев» в консоли. Это лишь вопрос удобства — кому-то удобнее мышкой в Nautilus’е выбирать файлы для копирования, а кому-то удобнее cp ~/photos/{photo,video}_*.{jpeg,jpg,JPG,avi} /media/BACKUP делать. Прекрасно, что Linux (на данный момент) предоставляет выбор как для людей привычных к графическому интерфейсу, так и для тех, кому привычно общаться с машиной текстом.

Примечания

  1. Filesystem Hierarchy Standard 

  2. Advanced Linux Sound Architecture 

  3. Systemd-free дистрибутив Debian: https://www.devuan.org/. Использую его на ноутбуке, потому что сборка Gentoo на Thinkpad X220 с Intel Core i7, способна устроить натуральное глобальное потепление, в силу того что система охлаждения с трудом справляется с нагревом процессора под нагрузкой. 

  4. Language Server Protocol