Как стать автором
Обновить

Первое знакомство с Linux – все плохо, но может быть лучше

Дисклеймер 1: здесь я говорю о linux не как о ядре, а как о семействе операционных систем.

Дисклеймер 2 (взят с этого сайта): Несколько важных вещей перед тем как читать:

  1. Если вы верите, что Linux идеален, пожалуйста, закройте эту статью

  2. Если вы думаете, что критика Linux предназначена только для необоснованного ругательства в сторону Linux, закройте эту страницу.

  3. Если вы думаете, что цель этой статьи - показать, что «ничего не работает в Linux или Linux почти не используется», вы ошибаетесь, пожалуйста, закройте эту страницу.

  4. Если вы думаете, что я здесь, чтобы продвигать Windows или Mac OS, закройте эту страницу.

Дисклеймер 3: дальше одно большое мое ИМХО: первый пользовательский опыт с linux, написанное частично на эмоциях, вероятно с ошибками, так что просьба не бить палками, а предоставить здоровую критику) Заранее спасибо.


Всем привет. Недавно я решил попробовать linux вместо windows, которым пользуюсь уже довольно давно.

Последнее время до меня стали доходит разговоры, какой линукс крутой и замечательный. Я на своей шкуре решил это проверить. Выбрал довольно популярный дистрибутив неплохо подходящий для новичков. На первый взгляд все кажется круто: LiveCD с приятным рабочим столом, кастомизация все дела... Но после установки я сразу столкнулся с проблемами, о существовании которых пользователи windows могут только “мечтать”. Банальная смена клавиш переключения раскладки, ломает половину шорткатов. Как оказалось этой “особенности” уже около 17 ЛЕТ (первое упоминание этой проблемы встретил от 2003 года, но ссылка потеряна). Несмотря на то, что есть патчи, фиксящие это, их до сих пор не включили в upstream. В браузерах отсутствует функция прокрутки страницы по нажатию колеса. Такого рода мелочи очень поломали мой UX. Если Linux хочет стать популярным, ему нужно добавить привычные для Windows пользователя мелкие детали (жду шутки про неотключаемые автообновления и телеметрию XD). Сейчас Linux для меня выглядит как что-то среднее между альфой и бетой очень многообещающей системы. Пока что я вижу, что системой удобно пользоваться либо совсем нубам, которые даже не поймут, что они пользуются другой ОС или профи, которые могут все настроить под себя, а если что-то сломается, самостоятельно починить. Но это ладно… больше мелочи.

Что меня больше всего огорчило – это организация файловой системы. Я надеялся сбежать с корабля хаоса windows на корабль linux, где хотел найти порядок, понятную и логичную организацию каталогов. Нашел же я /usr, /bin, /usr/bin, /usr/local, /etc и тд. What hell is that??? Я понимаю что это все тянется со времен unix (легаси, оно и в Африке легаси) и такая структура используется, потому что так заведено, но она не кажется мне удобной. Это собственно и стало краеугольным камнем преткновения, оттолкнувшим меня в итоге от использования linux. Я любитель логики и удобства. Здесь я не увидел ни того, ни другого. Как мне например установить программу, которая поставляется в тарболе? Почему часть программ ставятся в /usr/local, а часть в /usr, а часть вообще в /opt? Почему я, как пользователь, должен читать мануалы и запоминать огромные схемы, объясняющие структуру файловой системы? Где интуитивность, которая так необходима простым пользователям? На мой взгляд, вообще само существование такого рода гайдов говорит, о том, что-то то не так. В Windows это все чуть более логично, хотя тоже со своими особенностями (appdata/local, appdata/roaming ага да).

Зачем в linux такие сложности? На мой взгляд стоит обновить FHS (Filesystem Hierarchy Standard), осовременить его: сделать имена папок более полными, а не убогими сокращениями, например. Есть отличный пример этой идеи в виде организации директорий в GoboLinux. Думаю FHS должен двигаться примерно в этом направлении, чтобы новым пользователям, которые будут мигрировать с windows, было легче освоиться. Да, работы предстоит много!

Далее хочу поговорить про важную часть Unix way – зависимости. Это конечно ад, если к этому подходить, как это есть сейчас (о славные, бедные мейнтейнеры, трудящиеся в поте лица, чтобы все это работало). Мне довелось использовать NPM, и знаете, мне нравиться, как он организует управление зависимостями. На мой взгляд, благодаря этой чудо вещи dependency hell issue в веб сфере более менее решена. Сделано это за счет диапазонов версий и строгого придерживания semver. Диапазоны позволяют делать дедупликацию и экономить место, при этом, так как пакеты следуют semver, зависимые от них программы не ломаются. Подробнее о том как работает npm можно найти здесь: пакеты и модули в NPM, npm-install#algorithm.

Я думаю данные паттерны можно применить к Linux и управлению пакетами в нем, сделав таким образом этот процесс более интуитивно понятным, а пакеты дистрибутиво-независимыми и при это сохранив возможность использовать общесистемные библиотеки, которые будут храниться в глобальном хранилище. Lock файлы позволят делать легкие backup’ы. Думая, это откроет такие новые возможности как смена дистрибутива в несколько команд. 

Например, система может быть организованна следующим образом. Основным в системе будет пакет Core, у которого будет только следующие зависимости:

  • kernel – ядро Linux

  • system – основные системные пакеты, которые сейчас являются частью дистрибутива, то есть среда рабочего стола, основные системные библиотеки и т.п.

  • user – все остальные пакеты

    • all – установленные по умолчанию программы, такие как офисный пакет, почта, калькулятор и т.п., а также программы, устанавливаемые под root пользователем и доступные всем другим пользователям

    • vasya – Программы конкретного пользователя, к которым никто другой доступа не имеет. Устанавливаются от имени пользователя, не требуют root прав

    • petya – Программы конкретного пользователя, к которым никто другой доступа не имеет. Устанавливаются от имени пользователя, не требуют root прав

Примечание: kernel, system, user и т.д. являются пакетами со своими зависимостями, которые также являются пакетами со своими зависимостями – рекурсия.

Еще необходимо будет зарезервировать namespace @local , чтобы пользователь мог устанавливать пакеты, не представленные в репозитории, такие как например поставляемые в тарболах. Причем нет смысла заставлять пользователя вручную писать манифест пакета, а лучше сделать простенькую программу с gui и cli, которая будет сама формировать манифест, задавая вопросы по типу: как пакет называется и т.п., чтобы пользователь знал как на них отвечать и ему не потребовалось совершать какие-то дополнительные, сложные действия.

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

Еще круто будет полностью отделить данные программ от пользовательских данных: программы не должны писать прямо в home директорию пользователя. Это место для людей, не для “роботов”. Я думаю, данные приложений должны быть разделены примерно следующим образом: 

  1. Program Data: Сама программа и все необходимые для ее запуска файлы (только для чтения. Любые манипуляции с этими данными совершает ТОЛЬКО пакетный менеджер)

  2. Tmp: временные данные, кэш

  3. Appdata: всякие ресурсы, загружаемые из интернета и прочие данные, нужные программе, но скорее всего неинтересные пользователю. (удаляются вместе с программой)

  4. Userdata: данные программы, интересные пользователю: конфиги, сохранения игр (остаются после удаления программы)

При этом у пользователя должна быть возможность как в Android удалить все данные программы в два клика. Логично было бы предположить, что Appdata должна находиться например в /Data/Someprogram/Appdata, а Userdata в папке конкретного пользователя (/home/Vasya/.Userdata/Someprogram), причем на Userdata должна быть ссылка из Appdata: так пользователю будет проще найти все данные, связанные с конкретной программой, и вычистить их вручную при необходимости, при этом папку с личными данными (/home/Vasya) пользователя можно будет спокойно перенести в другую систему. Пример: /Data/Minecraft/Appdata, /Data/Minecraft/Userdata -> /home/Vasya/.Userdata/Minecraft, /Programs/Core/deps/user/Vasya/Minecraft. На данный момент в windows приходиться рыскать по минимум пяти папкам (appdata/local, appdata/roaming, appdata/locallow, ProgramData, ProgramFiles(x86)), чтобы найти все данные программы и полностью ее удалить, что, я считаю, неудобно (uninstall.exe далеко не всегда удаляют программу целиком, то есть так, чтобы следов ее пребывания в системе не оставалось).

Насколько я понимаю, основной язык для linux это C. Запахло древностью, хаха) Думаю, C неплохо было бы модернизировать: добавить модули (нормальные, а не эти костыли, как я считаю, что есть сейчас (#include <libsome.h>, я смотрю на тебя)). Изоляция модулей, позволит убрать некоторые неровности в опыте разработчика: использовать процедуры до их объявления внутри модуля (как это сделано в JS с функциями), сделать зависимости более явными. Да и можно будет использовать глобальный пакетный менеджер linux (который предстоит еще сделать) для управления пакетами для C. Круто наверное было бы еще добавить безопасные макросы, которые не надо будет оборачивать в сто слоев скобок и прочих оберток.

Также я считаю, что бесплатная открытая IDE ala Visual Studio для C под linux это must have. Все таки современные разработчики любят всякие такие штучки.

Это что касалось вопросов технических

Теперь про пользователей.

Когда все вышеперечисленное будет сделано, первых кого нужно перетащить, это разработчиков софта. До конца. Чтобы им было просто противно хотя бы даже докасаться до windows. Они просто интуитивно будут писать софт именно под Linux – свой главный инструмент, систему, которую они используют каждый день. Так будет уже какая то более менее полная база ПО в том числе и для пользователей. Да, сейчас уже есть аналоги многим популярным программам с windows, но мне кажется их еще не достаточно, местами может не хватать функционала или интерфейс может быть сильно непривычным.

Сейчас, если пользователь каким то чудом узнает, что существует Linux, то загуглив «linux» он попадет на довольно простой сайт linux.org, на котором не обнаружит большой зеленой кнопки СКАЧАТЬ или КУПИТЬ. Если он начнет разбираться, как же это чудо все таки установить, то наткнется на какие то дистрибутивы… «Лол это что? – скажет пользователь и бросит занятие, – Че то надо выбирать! Много! Сложно!». Если сделать так, что по запросу linux пользователю будет выдаваться глянцевый современный сайт с рюшечками, с описание преимуществ, и большой кнопкой скачать, то пользователь быстрее и проще клюнет. Причем «Скачать» не должна перекидывать на страницу выбора дистрибутива (как это по сути сделано сейчас), а должна сразу скачивать образ и выводить инструкцию о том, как это чудо себе на компьютер поставить. Еще можно qr добавить. чтобы пользователь мог с телефона открыть инструкцию и спокойно переставить ОС без необходимости переписывать инструкцию на бумагу. Ну это уже так, мелочи)

Live образ не должен посвящать пользователя в то, какие вообще есть дистрибутивы. Вместо этого программа установки должна спросить несколько общих вопросов, на основе которых выбрать за пользователя (они не любят выбирать сами) стартовый набор программ (включая среду рабочего стола и прочие системные вещи) –  по сути дистрибутив, только более модульный. Для более опытных пользователей можно оставить функцию выбора набора стартовых программ вручную, чтобы не отбирать возможность настроить все под себя. Стоит также обновить логотип linux, сделать его более современным, ярким, чтобы пользователи скорее обращали на него внимание, то есть по сути превратить linux в бренд, узнаваемый бренд. Ну и остается только мечтать о рекламной компании. Может конечно сыграть фактор сарафанного радио, но на мой взгляд реклама сыграла бы значительно более существенную роль в раскрутке бренда Linux. Ну и как уже много раз говорили – предустановка наше все) Тут я никаких новых идей уже не выскажу, просто повторю: пользователи чаще всего оставляют все по умолчанию, потому что лень. Они уже заплатили за что-то (за ноутбук например), зачем им еще что-то делать. Если это возможно было бы круто пропихнуть законы, чтобы ОС покупалась отдельно от ноутбуков, а они поставлялись девственно голые или с какой-нибудь FreeDOS или OpenBSD. Ах мечты!

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.