Разработка ядра Linux
Ядро Linux — это огромный проект с открытым исходным кодом, разработка которого ведется уже более 25 лет. Хотя многие думают, что большинство проектов с открытым исходным кодом разрабатываются энтузиастами, над ядром Linux работают профессиональные программисты, которые получают за это деньги.
Согласно данным The Linux Foundation, начиная с 2005 года, более 14 000 индивидуальных разработчиков и более чем 1300 различных компаний внесли свой вклад в ядро. В этой статье мы рассмотрим, как и кем ведется разработка ядра Linux, кто все это финансирует и контролирует.
Разработка ядра Linux
Примерно раз в год The Linux Foundation выпускает отчет по процессу разработки ядра с данными о частоте выпусков, скорости изменений и компаниях, которые в этот раз внесли свой вклад. Например, последний отчет был выпущен в августе 2016 года и охватывает версии ядер 3.9 — 4.7.
Одно из наиболее интересных изменений — это уменьшение вклада в развитие ядра со стороны неоплачиваемых разработчиков. За этот период их доля сократилась от 14,6 до 7,7%. Это объясняется тем, что многие из этих разработчиков были наняты компаниями.
Что касается корпоративных взносов, то за этот период доля Intel составила 12,9%, Red Hat — 8%, Linaro — 4%, Samsung — 3,9%, SuSE — 3,2%, IBM — 2,7%. Но несколько лет назад история была совсем иной. В 2010 году Red Hat была на первом месте — 10.2%, за ней Intel — 8,8%, Texsa Instruments — 4,1%, Linaro — 4,1%, SuSE — 3,5%, IBM — 3,1%. Заметно выросла доля Intel. Директор отдела Intel Open Source Technology Center не раз заявлял, что ядро Linux имеет для компании очень важное, стратегическое значение. Как видим, поддержка ядра Linux выполняется многими компаниями.
Также интересным есть увеличение вклада компании Samsung от 2,9 до 3,9%. На фоне других компаний вклад Red Hat снижается, но совместное участие Red Hat и Intel держится достаточно стабильным на протяжении многих лет. Начиная от низкого уровня 18,1% в 2012 и до максимума — 20,9% в 2016.
На конференции LinuxCon в 2016 году генеральный директор Red Hat, Джим Уайтхерст, говорил о том, что на ряду с техническим вкладом в ядро, они строят новую бизнес модель. Возможно, увеличение доли Intel свидетельствует о том, что они пытаются повторить то, что уже было сделано в Red Hat. В плане патчей вклад различных компаний за 2016 год таков: Red Hat — 18,4%, The Linux Foundation — 13,5%, Intel — 12,1%, Linaro — 8,7%, Google — 5,3%, Samsung — 3,5%, SuSE — 2,9%, AMD — 2,1%.
То, что организация The Linux Foundation находится на втором месте не удивительно, поскольку здесь работает Грег Кроа-Хартман, который занимается поддержкой стабильной ветви ядра, подсистему тестирования, а также несколько других подсистем. Этот человек был ответственен за 13,992 из 14,180 правок от The Linux Foundation.
Кто управляет процессом?
Тем не менее вклады компаний и разработчиков ничего нам не говорят о том, как принимаются патчи в ядро и как идет разработка ядра Linux. Ядро Linux — это огромный проект, над которым работает большое количество разработчиков. Все это невозможно контролировать одному человеку. Сделаем небольшое описание ядра Linux.
Ядро имеет различные подсистемы, например, графическую, устройств USB, сетевую, планировщик и так далее. Поддержанием каждой из подсистем занимается отдельный человек — сопровождающий. Компании и разработчики отправляют свои патчи сопровождающим тех или иных подсистем.
Сопровождающие просматривают патчи, отправленные другими программистами, или компаниями и принимает их, или же возвращает на доработку. Так происходит с каждой подсистемой. После принятия патча, он добавляется в тестовую ветку ядра, где проходит тестирование, и уже тогда, если все хорошо идет дальше.
Для координации действий всех разработчиков используется рассылка Email. На первый взгляд, может показаться, что это устаревшая технология, но на самом деле это не так. Почта — это лучший способ управления таким большим проектом, как ядро. Она быстрее, чем любая из альтернатив, при количестве изменений от 8 в час от 4000 разработчиков и 400 компаний, нужно очень мощное решение.
Git мог бы давно заменить рассылку, он имеет несколько преимуществ, но он хорош для небольших проектов, что касается таких мощных проектов, как ядро, то возможностей и масштабируемости недостаточно.
Выводы
В этой статье мы сделали описание процесса разработки ядра linux, кто основные разработчики ядра, и как они это делают. Надеюсь, информация была полезной для вас.
Видео «Как разрабатывается Linux» от The Linux Foundation:
Источник
Как стать разработчиком ядра Линукс: шаги?
Могу я попросить совет, что освоить и на чем попрактиковаться, какие книги и проекты изучить, чтобы расти в сторону системного программиста под Линукс?
Посмотрел вакансии и выяснил, что требования примерно такие:
XXX приглашает на работу Linux Kernel Developer Требования: хорошие знания ANSI C; опыт программирования на уровне ядра Linux ; знание архитектуры Linux и умение ориентироваться в исходных текстах ядра; владение базовыми средствами разработки под Linux (gcc, binutils, gnumake, инструментарий отладки системного ПО); опыт написания драйверов или программных компонентов DSP;
Примерно для себя наметил:
1. Прочесть книгу по Линуксу. 2. Прочитать книгу по архитектуре компов и устройству ОС 3. Прочитать книгу по ядру Линукс 4. Выучить С по Кернигану 5. Осилить основы электроники и схемотехники. 6. Писать свои проекты и изучать чужой код — пока еще четко не выбрал, что именно. .
Есть опыт только в написании сайтиков. Спасибо за советы!
>Есть опыт только в написании сайтиков
ничего не нужно учить и читать! ты со своими знаниями принесёшь тонны пользы Линуксу! сообщество поставит тебе прижизненный памятник за вставки на html!
Надо на нём писать.
Разумеется, но одно знание С мало что даст без параллельного изучения внутренностей системы.
Мне будет достаточно поздравительной открытки от Торвальдса и Столлмана 🙂
Для начала бросить девушку, если есть. А если серъёзно, то без C не обойтись.
Спасибо, это само собой. Честно говоря, интересно узнать, что почитать и поковырять, дабы научиться писать к примеру дрова. Копать от схемотехники?
Одновременно копай книжки по программированию(только не сайтиков) + оттачивай скилы.
все когда то так начинали..
для начала пиши все на html с небольшими вставками на С юзай тег
>5. Осилить основы электроники и схемотехники.
Я чуть карамелькой не поперхнулся (=
А можно поинтересоваться у ТС наличием высшего образования?
ВО — обязательное условие чтоли?
> А можно поинтересоваться у ТС наличием высшего образования?
Настоящим linux какерам 14 лет, и они ходят в 9 класс.
Есть, но не программирование и не электроника, поэтому и хочу получить необходимый базис.
Я думаю, они необходимы прои написании дров.
Ты всё-таки поясни, электроника то тебе куда упёрлась для программирования ядра линупса?
Чтобы научиться писать драйвера, надо прочитать книгу Linux Device Drivers. Она доступна в виде pdf. Третье издание — про драйвера для 2.6, второе — 2.4, 2.2 и т.д. Можно читать сразу третье. Само собой, надо ещё хорошо знать линукс, интерфейс POSIX и язык C.
Вы знаете, я хотел бы вернуть те 14 лет, чтобы более правильно расставить приоритеты и осознанно выбрать, куда пойти учиться.
> Я думаю, они необходимы прои написании дров
Совершенно не понадобятся, я это гарантирую. Для написания дров тебе достаточно знать интерфейс железки.
Спасибо, запишу в книжечку!
Приму к сведению))
Плюсую, для каждой новой железки придется изучить мануал по ней с описанием регистров, памяти, способов инициализации и т.д. Электронику знать не нужно, если не собираешься сам устройство паять.
А город какой кстати?
Есть, но не программирование и не электроника, поэтому и хочу получить необходимый базис.
Тогда можно начать с книжки по теории операционных систем, рискну посоветовать «Введение в операционные системы» Иртегова. Если по сети пошариться — должно быть в электронном виде. Я так понимаю, что будет достаточно тяжело читаться (хотя там подробно и с юмором), но стоит осилить. Расширит кругозор, что в дальнейшем очень пригодится.
Ну и в процессе чтения если какие-то моменты совсем не понятны — тогда пошариться в интернете, посмотреть доп. литературу и т.п. После, как время будет — можно посмотреть «Современные операционные системы» Таненбаума, должно довольно легко пойти, так как базис уже будет.
Параллельно стоит почитать какую-нибудь книгу по С.
По поводу практики, до того, как лезть в ядро — стоит пописать просто системные приложения под линукс. Как вариант — посмотреть здесь. Там есть ссылка на задачки, которые можно порешать и на рекомендуемую литературу. Некоторого базового опыта набраться поможет.
Ну а собственно по ядру — может быть стоит глянуть сюда. Вроде бы на ЛОРе этот курс обсуждался, но ссылку сейчас уже не найду. Там неплохой список литературы, а также описание настройки рабочего места, должно быть полезно.
Ну и наконец, что касается «электроники». Вообще как выяснилось — это довольно полезно, но действительно можно спокойно прожить и без этих знаний. Полезно «пощупать» какой-нибудь ПЛИС (тот же Spartan3e, к примеру), но это уже если есть время и деньги на соотв технику. В эмуляторе не так интересно 🙂
>podelkin (25.05.2010 15:25:21)
С таким ником можно без проблем стать разработчиком линукса. Ядро как раз подходит.
>>основы электроники и схемотехники
Совершенно не понадобятся, я это гарантирую
смотря какие дрова.
из опыта — очень даже надо.
> Как стать разработчиком ядра Линукс: шаги?
Есть опыт только в написании сайтиков. Спасибо за советы!
> из опыта — очень даже надо
Например, для драйверов каких устройств?
1. Прочесть книгу по Линуксу. 2. Прочитать книгу по архитектуре компов и устройству ОС 3. Прочитать книгу по ядру Линукс 4. Выучить С по Кернигану 5. Осилить основы электроники и схемотехники. 6. Писать свои проекты и изучать чужой код — пока еще четко не выбрал, что именно. .
5 особо не нужно (ну, разве, если совсем ноль), 6 — всё время.
без параллельного изучения внутренностей системы.
вот на это делай большой упор
Еще можно сначала стать анестезиологом.
0. Успешно закончить 5-ый класс общеобразовательной школы.
Хотябы прочитать и сделать половину примеров из Ричарда и Стивенса «Профессиональное программирование UNIX»)))Там и POSIX и ANSI стандарты.
Прочитать про stable api nonsense.
Роберт Лав. Разработка ядра Linux.
там вроде 2.6.8, хотя книжка да, хорошая.
там вроде 2.6.8, хотя книжка да, хорошая.
Ну и что там радикально изменилось, что знания фундаментальных основ так стремительно устарели? Ничего. Ставь в виртуалке 2.6.8, копайся. На более современное ядро потом перейти — дело техники.
Если ты ещё не учился в институте, то можешь попробовать поступить
на факультет радиотехники физтеха, там есть кафедры, которые
занимаются ОС. Наверняка такие кафедры есть и на ВМиК МГУ.
>Например, для драйверов каких устройств?
например для правильного конфигурирования вводов/выводов микроконтроллера и последующего управления какой-нибудь железкой через них. Полезно знать, что такое логический буфер с тремя состояниями, выход с открытым стоком, чем регистр переключающийся по фронту отличается от защелки и т.п. Самые основы. Можно наверное и без этого, но так проще и времени ознакомление со всем этим займет не так уж много. Топикстартеру посоветую почитать «Проектирование цифровых устройств» Уэйкерли (можно нагуглить).
Нах учиться сейчас?! Это пустая трата времени и денег
>Нах учиться сейчас?!
В большинстве случаев высшее образование полезно.
Это пустая трата времени и денег
Это смотря где учиться 🙂
> В большинстве случаев высшее образование полезно.
Сейчас вообще каждый дворник, админчик или продавчишка с «вышкой». Все давно понимают, что вышка ничего не стоит.
Во-первых, в нормальном институте могут многому научить и мозг натренировать.
Ты в курсе, что по статистике, наиболее эффективно мозг работает в 22-23
года? Т.е. как раз после окончания института.
Во-вторых, зайди на hh.ru. Во многих интересных вакансиях есть требование:
выпускник МГУ, МФТИ, МИФИ, МВТУ. Во многих вакансиях есть требование просто «В/О».
Т.е., конечно, можно сразу после школы пойти быдлокодером и писать километры
кода, но эта работа хуже дворницкой.
Понятное дело, лучше учиться в престижном заведении, но стать клевым
специалистом можно и в обычном ВУЗе. У меня одноклассник закончил
МАДИ. Институт ещё тот — его называют самым дорогим из бесплатных.
Чувак нормально учился, не ради оценок, что называется, потом пошел
работать проектировщиком дорог. Сейчас, через 2 года получает 80K.
Нормальная ЗП. Сложно представить неквалифицированного специалиста,
который за 2 года дойдет до такой суммы.
Спасибо, я уже свое отучился, правда не по специальности. Подумываю пойти на заочку через год, но так как я из Минска, то выберу какой-нить из местных университетов. Хотя заочка это скорее для корочки.
Можешь попробовать попасть на бесплатные ядерные курсы Ауриги.
Но для этого нужно очень хорошо программировать.
Можешь попробовать попасть на бесплатные ядерные курсы Ауриги.
Источник