LINUX.ORG.RU

Хочу стать Linux Kernel Hacker, но...

 , , ,


1

5

Здравствуйте. Я студент, и меня интересует такой вопрос.

Мне нравится linux, интересно построение операционных систем. Сейчас читаю Таннебаума и Кернигана&Ритчи. Хочу стать настоящим спецом по ядру линукса. Но знакомые отговаривают и приводят такие доводы:

1) Процессоры развиваются, памяти становится всё больше, компиляторы умнеют, сборщики мусора работают всё лучше и лучше.

2) Работа скучная, придётся почти всё время сидеть в обнимку с дебаггером.

3) Работа скучная ещё и потому, что завязана на знании стандартов. Мало творчества, негде применять продвинутые алгоритмы.

4) Работа завязана на старых технологиях и подходах. Язык - С. Всё что есть в современном software engineering пройдёт мимо меня - паттерны, ООП, UML, MVC, функторы, акторы, функциональщина и многое многое другое.

Можете рассказать, что из этого правда, а что нет?

Работа завязана на старых технологиях и подходах. Язык - С. Всё что есть в современном software engineering пройдёт мимо меня - паттерны, ООП, UML, MVC, функторы, акторы, функциональщина и многое многое другое.

Ну разумеется ООП не будет. Просто потому что оно там и не нужно.

knotri
()

1) Процессоры развиваются, памяти становится всё больше, компиляторы умнеют, сборщики мусора работают всё лучше и лучше.

И какая тут связь? Из-за этого линукс вымрет что ли?

2) Работа скучная, придётся почти всё время сидеть в обнимку с дебаггером.

Без понятия, если честно. Я для драгонфлая, например, только фиксил баги. Тут более аналитические способности, а если не они то git bisect и история изменений.

3) Работа скучная ещё и потому, что завязана на знании стандартов. Мало творчества, негде применять продвинутые алгоритмы.

Тоже вещи параллельные - стандарты и алгоритмы.

4) Работа завязана на старых технологиях и подходах. Язык - С. Всё что есть в современном software engineering пройдёт мимо меня - паттерны, ООП, UML, MVC, функторы, акторы, функциональщина и многое многое другое.

Хорошая архитектура не зависит от языка. И ты ошибаешься, если ООП - это C++. В ядре linux наверняка ООП есть (во фре есть, по крайней мере).

hvatitbanit
()

Есть куча доводов против того, чтобы быть системщиком... но вот это:

паттерны, ООП, UML, MVC, функторы, акторы

гребаные баззворды. Аргументация на таком уровне - дешевые нубские понты.

А «продвинутые алгоритмы» приходится применять не реже, чем везде (т.е. почти никогда).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Я ведь хотел сказать, что это баззворды, но перед пацанами стыдно. Сейчас сказали бы: «Ничего ты не понимаешь в мировых тенденциях. Иди пиши хеллоуворлды».

hvatitbanit
()
Ответ на: комментарий от shakaswer

Работа в основном без инструментальной поддержки (ага, отладка через printk), внимание к нерелевантным деталям (ты же на Си пишешь), периодическая необходимость знать неинтересную низкоуровневую муть типа деталей функционирования/багов конкретной шины IO или конкретных контроллеров прерываний. Короче, уровень абстракций низкий - не позволяет почувствовать себя крутым за счет навороченного фреймворка :)

tailgunner ★★★★★
()

Язык Си и низкоуровневое программирование по-прежнему актуально, так что не беспокойся. Просто ты слушал прикладников. А так работа тебе найдётся - кто портирует Android на новый смартфон? Кто программирует всякие микроконтроллеры? И всё это делается на Си, если не на Ассемблере вообще. Какая бы крутая железка не была, для неё всё равно сначала нужно написать драйвер.

KivApple ★★★★★
()
Ответ на: комментарий от hvatitbanit

Я ведь хотел сказать, что это баззворды, но перед пацанами стыдно

Ну, справедливости ради, всё это может быть полезным, но это уж точно не «самое интересное в SE».

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

А вот в драгонфлае есть такая фигня как vkernel - позволяет запускать и отлаживать ядро как юзерспейсный процесс (правда устройства пробрасывать не умеет, так что драйверы так не отладить). А в linux есть что-то подобное? Или самый лучший вариант - отлаживать его в виртуалке?

hvatitbanit
()

Лучше начни с хакинга самого себя для начала...

swwwfactory ★★
()
Ответ на: комментарий от hvatitbanit

В Linux когда-то давно (еще до форка Dragonfly, да) был User-mode Linux. Он вроде и сечас жив, но, ИМХО, нерелевантен.

tailgunner ★★★★★
()
Ответ на: комментарий от hvatitbanit

А в linux есть что-то подобное?

С ядра 2.4. Называется user mode linux.

Reset ★★★★★
()

Работа завязана на старых технологиях и подходах. Язык - С.

Вот мы ковыряем Openstack, и чем дальше, тем больше приходит понимание что это не софт, а операционная система. Только на следующем уровне абстракции. И все те же драйвера и файловые системы у нас, и сетевой стек, и kdbus, куда же без него. Вот systemd пока не хватает, сидим на инитскриптах..

И при этом регулярно приходится спускаться на уровень линуксового ядра и копаться в его проблемах.

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

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

alpha ★★★★★
()

п.1 - ерунда, ЯП со сборкой мусора никогда не заменят Си в его области.
Все остальное - правда, к тому же учти что работу системным программистом найти куда труднее чем например веб-кодеру, а платят не то чтобы сильно больше.

rand
()
Ответ на: комментарий от knotri

Ну разумеется ООП не будет

Типовые драйверы в ядре Linux отлично демонстрируют простое «ООП» на Сишке, если что.

yoghurt ★★★★★
()

Ведро это целый мир трэшам, угара и чада кутежа.

1 - Есть embedded, где производительность не так высока и приходится сдерживать прекрасные порывы абстракционизма.

2 - Тут уж кому как. Иногда приходится и с дебаггером посидеть. особенно если драйвера пишешь.

3 - смотря что считать продвинутыми алгоритмами. диспетчеризация потоков в ядре - это тот ещё rocket science местами, RB-деревья и прочее. Другой разговор, что что-то непонятное без явного выигрыша в какой-то части и без особых регрессий в других, тебе Тролльвардс пропихнуть не даст.

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

Dark_SavanT ★★★★★
()

Работа завязана на старых технологиях и подходах

чё мелочится , давай от русского и прочих языков разговорных откажимся ибо старые технологии и подходы,

ну и от арифметики( тоже не девочкова возраста) -

да и вообще адитивность величин это так не модно и совсем не прогрессивно,

ну а уж отсутствие делителей нуля совсем прошлая эра.

кури жабаскрипт.

qulinxao ★★☆
()

кста реальне ООП это числа.

одно из самых абстрактных абстракций которыми ты оперируеш.

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

как и прикладное ооп - это как раз уступка малообразованным массам вместо абстрактных чисел которые имеют отдельную таблицу отображения ( либо как данные либо как алгоритм) вояют некую иерархию .

qulinxao ★★☆
()
Ответ на: комментарий от tailgunner

И ОТГОНЯЮТ ЛЕТАЮЩИХ КРОКОДИЛОВ!!1

Которых, кстати, сами и запускают. Just for fun.

i-rinat ★★★★★
()

по п.п.

1) Процессоры развиваются, памяти становится всё больше, компиляторы умнеют, сборщики мусора работают всё лучше и лучше

от этого работы (и CS в том числе) в ядре только прибавляется.

2) Работа скучная, придётся почти всё время сидеть в обнимку с дебаггером.

скорее кропотливая чем скучная. Сеанс отладки ядра то ещё удовольствие, поэтому большую часть времени будешь изучать код вдоль и поперёк, чтобы пореже тыкать отладчиком

3) Работа скучная ещё и потому, что завязана на знании стандартов. Мало творчества, негде применять продвинутые алгоритмы.

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

4) Работа завязана на старых технологиях и подходах. Язык - С. Всё что есть в современном software engineering пройдёт мимо меня - паттерны, ООП, UML, MVC, функторы, акторы, функциональщина и многое многое другое.

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

пункты 5 и 6 ТС просто не знает:

5) придётся дохрена читать мутных и кривых текстов на плохом английском. Во многих тонкостях ядра и актуальных новшествах можно разобраться только по блогах/публикациям авторов, в mail-архивах и по переписке. А авторы отнюдь не Шекспиры :-)

6) в какой-то момент заметишь, что подавляющую часть времени тратишь на блоги/публикации и переписку на кривом английском, отвечая на критику и защищая свой «продвинутый» алгоритм и пытаясь продвинуть-таки многолетний патчсет. Ядро это базар - там надо кричать

MKuznetsov ★★★★★
()

4) Работа завязана на старых технологиях и подходах. Язык - С. Всё что есть в современном software engineering пройдёт мимо меня - паттерны, ООП, UML, MVC, функторы, акторы, функциональщина и многое многое другое.

Звучит, как райская жизнь.

G0D
()
Ответ на: комментарий от DeVliegendeHollander

Ку и кю вполне достаточно.

0 и 1 вполне достаточно. // fix!

Atlant ★★★★★
()
Ответ на: комментарий от hvatitbanit

А в linux есть что-то подобное? Или самый лучший вариант - отлаживать его в виртуалке?

есть vfio. А чтобы отлаживать драйвер в виртуалочке, нужно модель устройства делать или всё тот же vfio.

dimon555 ★★★★★
()

паттерны, ООП, UML, MVC, функторы, акторы

Buzzwords... Да и потом в ембед можно будет уйти, там линуксы тоже востребованы.

one_more_hokum ★★★
()
Ответ на: комментарий от tailgunner

И ОТГОНЯЮТ ЛЕТАЮЩИХ КРОКОДИЛОВ!!1

А крокодилы летают, товарищ прапорщик?

LongLiveUbuntu ★★★★★
()

* Залепи grsecurity пару раз с максимальным левелом, и если извращенец, с иксами.

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

И забей.

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

Таким образом, это практически не программирование, а база-данных железяк, их АПИ, ассемблерные коллы итд.

Вот если начнёшь модули рисовать для какого-то юзерленда сверху, какую нибудь IDS, на базе чего нибудь подобного grsecurity, то тут не важно что там в ядре, пара триков хаков, а сверху ты можешь рисовать любыми ООПшными способами, хоть на Яве лепи с приватами.

anonymous
()
Ответ на: комментарий от anonymous

Вот если начнёшь модули рисовать для какого-то юзерленда сверху

то впору подумать - а нахера нужен монолитный Linux

anonymous
()

просто шли всех на и делай то что тебе нравится

quest ★★★★
()
Ответ на: комментарий от knotri

Ну разумеется ООП не будет.

Сраз увидно большого специалиста по ядру!

to shakaswer:
Будет вам в ядре и ООП, и паттерны и прочая, прочая. Вы - студент. Пробуйте себя в разных сферах, развивайтесь всесторонне. Намного проще выбрать для себя что-то из того, что уже успел попробовать.

trex6 ★★★★★
()
Ответ на: комментарий от tailgunner

Они таки запилили userspace-драйверы!!1

vfio это апи к IOMMU, так что впринципе можно написать юзерспейс драйвер. доступ к устройству производится через файловый дескриптор, есть ещё eventfd для интераптов и возможность карту памяти для dma задать, чтобы не повредить другую память.

qemu так pci passthrough делает.

dimon555 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.