ппц, а как теперь загружаться в безопасном режиме? система больше не имеет право на поломку? понимаете, что теперь даже простой выхлоп ifconfig не будет помещаться на странице, когда отсутствует видеодрайвер? 80х24. офигеть.
теперь в конец каждой команды дописывать | less?
или теперь переписывать /etc/inittab чтобы он автоматически запускал сессию в screen / tmux?
Не «набором костылей», а «конструктором». Unixway же. У каждой отдельной софтины своя отдельная задача.
И сидеть в ядерной консоли без терминального мультиплексора и раньше было менее удобно. Я, когда сидел в ядерной консоли, сидел в screen'е. Так что, по ходу, я бы и с новым ядром с выпиленной прокруткой не заметил бы разницы.
Я и при сборке Pisaahriktux'а/1.5OSaahriktux'а первым делом собирал именно screen, а потом уже из него собирал всё остальное.
Не «набором костылей», а «конструктором». Unixway же. У каждой отдельной софтины своя отдельная задача.
Какая отдельная задача у ядра почти на 30 миллионов строк кода? Потому что сейчас, если бы у меня была Gentoo, ведро составляло бы наверное где-то треть всего кода по количеству строк. Ещё треть сожрал бы браузер. Если тут модно ругать браузеры за то, что они стали жирными, включают в себя всё больше и больше левых фич, то чем ведро отличается?
Или, например, тот же systemd, который тут модно поливать говном, весьма и весьма похож на ведро Linux архитектурно. Как так?
В ядре столько строк кода потому, что в его состав входят драйверы на весь зоопарк железа. Наибольшая часть соответствующих модулей ядра у всех юзеров просто лежит мёртвым грузом на жёстком диске никуда не загружаясь. Просто на тот случай если у юзера появится новое железо и какие-нибудь из них внезапно понадобятся. А без драйверов ядро бы стало бы гораздо худее.
Браузеры, да, становятся чуть ли не отдельными ОСями. Это уже как раз не Unixway, а наоборот.
systemd же можно рассматривать как целый набор системных инструментов, пусть и интегрированных между собой. Это не какая-то одна отдельная утилита.
ппц, а как теперь загружаться в безопасном режиме?
Как и всегда. У меня давно # CONFIG_VGACON_SOFT_SCROLLBACK is not set и никаких проблем с прокруткой в безопасном режиме уже много лет.
понимаете, что теперь даже простой выхлоп ifconfig не будет помещаться на странице
Ещё остались homo ertectus, которые до сих пор используют палку-копалку и не перешли на iproute2? Если не помещается — взял и перемотал, делов-то. Я всегда так делаю.
В ядре столько строк кода потому, что в его состав входят драйверы на весь зоопарк железа.
Зачем им туда входить? Почему Windows и Macos могут в сторонние драйверы, а линукс – нет? Получается очень забавная штука, когда закрытая и злобная венда гораздо дружелюбнее для разработчиков драйверов и железок, чем открытый и свободный Linux.
Без драйверов всё равно 12 миллионов строк. Это очень и очень много, на самом деле.
Браузеры, да, становятся чуть ли не отдельными ОСями. Это уже как раз не Unixway, а наоборот.
А ведро на 12 миллионов строк не считая драйверов – это Unix way что ли?
systemd же можно рассматривать как целый набор системных инструментов, пусть и интегрированных между собой. Это не какая-то одна отдельная утилита.
Так и ядро – это не одна отдельная утилита, по сути. Это как busybox, который один бинарник, только в нём дофига разных зачастую никак не связанных функций.
Для удобства юзера. Они уже есть и в ядре им самое место.
Почему Windows и Macos могут в сторонние драйверы, а линукс – нет?
Никто не запрещает собирать и устанавливать сторонние драйверы. И ряд драйверов именно так и распространяется. Тот же проприетарный драйвер Nvidia собирает и устанавливает свой сторонний модуль ядра, который не входит в состав ядра по умолчанию.
Без драйверов всё равно 12 миллионов строк. Это очень и очень много, на самом деле.
Смотря для чего. Сейчас уже не 90-е. Вот и ядру приходится выполнять больше функций.
А ведро на 12 миллионов строк не считая драйверов – это Unix way что ли?
Да.
Так и ядро – это не одна отдельная утилита, по сути.
Это вообще не юзерспейсная программа, а ядро. Которое должно выполнять всё, что требуется от ядра.
Для удобства юзера. Они уже есть и в ядре им самое место.
Чо? Типа, если это будут пакеты из репозитария, юзеру будет неудобно?
Никто не запрещает собирать и устанавливать сторонние драйверы.
Ты, кажется, не понимаешь проблемы. API в ведре ломается настолько часто, что нужно быть жирной корпорацией чтобы поддерживать более-менее сложный драйвер.
Мы с поцонами, когда делали одну свою ядерную штуку, нам чтобы поддержать CentOS 6 и 7 по сути пришлось половину драйвера переписывать. Потому что в API сетевого стека было оооочень много различий.
И ряд драйверов именно так и распространяется.
Назови хотя бы 5 кроме nvidia, amd и какого-нибудь mellanox.
Смотря для чего. Сейчас уже не 90-е. Вот и ядру приходится выполнять больше функций.
Каких функций? Зачем их выполнять ядру? Почему их не может выполнять отдельная программа в юзерспейсе?
Это вообще не юзерспейсная программа, а ядро.
В чём принципиальная разница-то? Ну, кроме самомнения разработчиков и общей ауры таинственности.
Которое должно выполнять всё, что требуется от ядра.
От ядра требуется только реализовать планировщик процессов и IPC и переключать контекст. Всё остальное без проблем уходит в юзерспейс. Даже линукс умеет юзерспейсные драйвера и прочие штуки.
Самый мрак, что, например, если что-то поломали в одной части ядра, то ты как дурак должен сидеть на старой версии и ждать у моря погоды, и все усовершенствования во всех остальных частях пролетают мимо.
Чо? Типа, если это будут пакеты из репозитария, юзеру будет неудобно?
А если у юзера система превратится в тыкву без отсутствующих драйверов?
API в ведре ломается настолько часто, что нужно быть жирной корпорацией чтобы поддерживать более-менее сложный драйвер.
Возможно. Но это уже несколько другой вопрос.
Назови хотя бы 5 кроме nvidia, amd и какого-нибудь mellanox.
Столько не назову, но в этом списке нет, по ходу, например, производителя чипов для USB Wi-Fi, который 6 лет назад выкладывал исходники драйвера для Linux'а на своём собственном сайте, а также производителя аппаратных устройств шифрования Рутокен (а они тоже свой отдельный драйвер для Linux'а делали).
Каких функций?
Системных.
Зачем их выполнять ядру?
Для скорости же. Если их вынести в юзерспейс, то система превратится в черепаху.
А если у юзера система превратится в тыкву без отсутствующих драйверов?
С чего она должна в тыкву превратиться? При установке системы ставишь драйвер, потом он обновляется. Что не так?
Возможно. Но это уже несколько другой вопрос.
Да нет, это ровно тот же вопрос.
Столько не назову
Да потому что их считай нет. Нужно жопу порвать чтобы писать драйвера под линукс. Все чуваки, которых я знаю и кто занимается ведром профессионально, чаще всего поддерживают ровно один дистрибутив и ровно одну версию ядра для своего железа, и это почти всегда какой-нибудь CentOS.
Системных.
Что такое «системные функции»? Нужен ли DNS ресолвер в ядре? Потому что это явно системная штука. Окей, как насчёт сислог демона? Тоже системнее некуда.
Для скорости же. Если их вынести в юзерспейс, то система превратится в черепаху.
Чо? У тебя юзерспейс на отдельном процессоре что ли? Или ты думаешь, что при запуске кода в Ring 0 сразу получается +200% буст к производительности?
С чего она должна в тыкву превратиться? При установке системы ставишь драйвер, потом он обновляется. Что не так?
А если, например, юзер перенесёт систему с HDD на SSD, но при этом в его системе не было драйвера для SSD, а установить его он забудет? Конечно, и в этом случае можно загрузиться с загрузочной флэшки, подмонтировать системный раздел и доустановить драйвер, но с этим надо возиться. А так уже имеющийся драйвер SSD просто подгружается.
У тебя юзерспейс на отдельном процессоре что ли?
Нет, не на отдельном, тут в другом дело.
Переключения контекста - удовольствие дорогое.
Переключение контекста обычно требует больших вычислительных затрат, и основной этап при проектировании операционной системы заключается в оптимизации использования переключения контекста. Переход от одного процесса к другому требует определенного времени для сохранения состояния регистров, обновления различных таблиц и списков и т.д. Например, в ядре Linux переключение контекста включает в себя переключение регистров, указателя стека, счетчика команд, но не включает в себя переключение адресного пространства.
Именно отсюда и возникают тормоза при вынесении кода в юзерспейс.
А если, например, юзер перенесёт систему с HDD на SSD, но при этом в его системе не было драйвера для SSD, а установить его он забудет?
Я не хочу тебя расстраивать, но у SSD и HDD один и тот же драйвер – ahci.
А так уже имеющийся драйвер SSD просто подгружается.
Ну, круто. Кто мешает по дефолту ставить в систему драйвера про запас? И зачем эти драйвера держать в ядре при этом?
Именно отсюда и возникают тормоза при вынесении кода в юзерспейс.
Отлично! А если не переключать контекст из юзерспейса в кернелспейс лишний раз, тормозов будет ещё меньше! И тогда чем меньше хрени в ядре, тем лучше скорость! Видишь, как всё отлично выходит?
Драйвера накопителей и так стабильно отваливаются, потому что утилита генерации initramfs слишком умная.
Я однажды просто засунул в конфиг опцию принудительно класть в образ драйверы всех возможных контроллеров и с тех пор живу спокойно. Почему это нельзя сделать по умолчанию, хз…
Практика показывает, что, например, без драйверов MMC ядро Linux SSD может и не увидеть (а сами SSD появляются в системе как /dev/mmcblk*).
MMC и SSD – разные вещи.
С этим нужно возиться. А так просто ставишь ядро и вместе с ним все имеющиеся драйверы.
Кому надо возиться? Я просто поставил Windows и у меня все нужные драйвера. Перенос на другой диск тоже без проблем работает. Почему линукс так не может?
Как показывает практика, не совсем разные. Десктопные SSD могут и не требовать MMC, не знаю. Однако, SSD в ноутбуках и неттопах появляются в системе именно как /dev/mmcblk*.
Я просто поставил Windows и у меня все нужные драйвера.
Винда из коробки тоже не без драйверов. Там тоже есть своя коллекция драйверов из коробки.
SSD в ноутбуках и неттопах появляются в системе именно как /dev/mmcblk*.
Это не SSD. Это напаянный MMC. У меня в старых ноутбуках SSD опознавались как /dev/sdX, в новых – /dev/nvmeXnY ибо NVMe.
Винда из коробки тоже не без драйверов. Там тоже есть своя коллекция драйверов из коробки.
Эта коллекция драйверов не является частью ядра Windows и разрабатывается сторонними разработчиками отдельно от Windows. Просто они входят в дистрибутив Windows.
Эта коллекция драйверов не является частью ядра Windows и разрабатывается сторонними разработчиками отдельно от Windows. Просто они входят в дистрибутив Windows.
Ну, в принципе, да, можно отдельно от ядра разрабатывать и опакечивать в отдельный пакет. kernel-firmware, вон, в отдельный пакет выносят, можно и пакет kernel-drivers сделать как коллекцию драйверов для ядра.
Ну, в принципе, да, можно отдельно от ядра разрабатывать и опакечивать в отдельный пакет.
Можно было бы. Только в лялексе это невозможно из-за отсутствия более-менее стабильного ядерного API. Хотя бы в пределах мажорной версии. В той же венде до сих пор многие драйверы от Vista работают, хотя уже почти 14 лет прошло.