Добрго дня всем пользователям линукса и не только. Давольно давно у меня есть желание поменять базовые устои юникса, которые являются не самыми удобными.
Файловая система линукса, гараздо понятней и структоризированней, чем таковая в винде. Как минимум тут используется всем понятная и удобная прямая косая черта /, а не ее зеркальный собрат . В винде это бесячее наследие доса, где вместо всем привычных - и -- для доп ключей к программам использовалась обычная косая черта /. Линукс же сразу был с юниксовой ФС и привычными ключами через тирэ.
К чему я все это, а к тому, что в линуксе есть что-то хорошее, но есть и что то очень бесячее. Одна из таких вещей - как устроены программы. Все программы в линуксе и бсд разбиваются на составные части.
Для примера возьмем абсолютно любую программу. В моем случае это будет firejail. Когда вы скачиваете это программу, не важно откуда, хоть собираете сами, хоть скачиваете с пакетника, в любом случае у вас в системе будут нужные бинарники, библиотеки, файлы для сборки и тд. Все это добро фасуется по дерриктории(далее папки) /usr. Что это значит? В usr есть своя подсистема.Там есть папки bin, include, share и тд. В bin находятся все бинарники, в include файлы для сборки, в shareобщие файлы для всех, например иконки, .desktop файлы. Но в /usr/bin творится жуткий ад. Там лежат в куче ВСЕ бинарники со ВСЕЙ системы(в том числе системные, например команды bash, cat и др.). Если вам не дай бог понадобится что то удалить оттуда вручную, то вы рискуете там банально умереть в поиске нужных бинарников и инклюдов. Для пример у VMWare было около 200 файлов расфасованных по ВСЕМ папкам! Удалить все это вручную это боль, а оффициальный установщик с сайта мало того поставляет нерабочую версию, так еще и не имеет функции удаления всего этого добра. Тоесть, если вы захотите удалить эту программу, то вы пойдете изучать КАЖДЫЙ бинарник в системе, каждую библеотеку и тд. Изза этого я терпеть не могу установщики в обход пакетника, что бывает довольно часто.
Какое мое виденье решения данной ситуации. Я предлагаю все каталогизировать. Нет, я не предлагаю переходить на вариант с самодостаточными пакетами флатпак и тд. Я предлагаю сделать в каждой поддерриктории /usr папки для каждой программы. Например все бинарники firejail будут лежать по пути /usr/bin/firejail, все файлы нужные для работы в /usr/include/firejail. Таким образом каждая программа будет лежать в своих уникальных папках, что позволит, при необходимости просто написать комманду:
rm -rf /usr/*/firejail
и удалить сразу все, что связанно с программой. Начиная от bin, заканчивая include файлами и тд.
Таким образом в системе будет более структоризированый порядок, а не хаос, который присутствует сейчас.
Каким образом это возможно реализовать?
Заставлять разработчиков специально создавать доп. каталоги при сборке программы. Способ довольно трудный, так как заставить толпу привыкшех программистов переучиваться себе дороже.
Создать специальный скрипт-файл, запускаемый при любой возможности установки программ. Будь то установски из пакетного менеджера, будь то сборка через GNU AutoMake, cmake. Как он будет работать? Он будет считывать имя программы, которую пытаются установить, пусть это будет APP_NAME задаваемый заранее, и создавать папки с этим именем во всех деррикториях,где это необходимо. Например /usr/bin/APP_NAME, /usr/lib/APP_NAME, /usr/include/APP_NAME и тд. От конечного разработчика будет требоваться лишь указывать имя пакета для установки, а скрипт все сделаем автоматически без его участия. Тут создается момент, что система не умеет прочитывать бинарные файлы вне /usr/bin или /bin. Для обхода этой болячки можно применить костыль. Создать файл, с прописанными путями и подключать его с помощью комманды source /путь/ в вашей оболочке терминала. Например прописать source /путь/ в файле ~/.zshrc - для zsh, для bash в ~/.bashrc и тд. Делать это все конечно нужны автоматически, при каждой итерации скрипта.
Да, рьяные поклонники и просто заложники привычки будут против таких нововведений, но это, как минимум, понизит порог входа в линукс и облегчит жизнь системам с полностью ручной сборкой программ. Например gentoo и тп.
Как вам мое предложения, как вы к нему относитель и как вы считаете, нужно ли оно? Жду вашего мнения в комментариях.