«Це просто сміття!»: Лінус Торвальдс розкритикував код, запропонований інженером Google

Творець та головний розробник ядра Linux Лінус Торвальдс публічно і різко відкинув внесок у код для підтримки архітектури RISC-V у майбутньому релізі Linux 6.17. Патч, надісланий інженером Google Палмером Даббелтом із команди Android, був відхилений під час обговорення у списках розсилки Linux через дві причини: низьку якість і запізніле подання.

Торвальдс наголосив, що цей внесок надійшов під кінець «вікна злиття» для версії 6.17, попри його попереднє прохання надсилати всі pull request’и завчасно, оскільки він перебував у відрядженні.

«Ні. Це сміття, і воно надійшло надто пізно. Якщо ви не можете дотриматися правила надсилати завчасно, хоча б робіть pull request’и якісними», — написав він.

Однією з найбільших претензій стала поява допоміжної функції make_u32_from_two_u16(), яку Торвальдс назвав такою, що «робить кодову базу гіршим місцем для життя». На його думку, ця функція приховує порядок обробки даних і вносить зайву складність у загальні заголовні файли, виходячи далеко за межі коду, специфічного для RISC-V.

Він підкреслив, що подібні зміни «забруднюють» ключові файли ядра, погіршуючи його підтримуваність, а також можуть створити ризики помилок у непов’язаних частинах системи. Тому, на його думку, будь-які внески мають бути максимально локалізованими в межах архітектури, для якої вони призначені, і лише у виняткових випадках зачіпати загальні файли — з чітким обґрунтуванням та завчасною подачею.

Публічна відмова супроводжувалася попередженням:

«Ви на прицілі: жодних запізнілих pull request’ів і жодного сміття поза деревом RISC-V».

Торвальдс також закликав розробника підготувати чистий і своєчасний внесок для версії ядра 6.18, натякнувши, що лише так він матиме шанси на схвалення.

Як вважаєте, реакція Торвальдса у таких випадках виправдана, чи він уже переходить межу й варто було б висловлюватися стриманіше?

👍ПодобаєтьсяСподобалось11
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Оце так новина. Нiколи такого не було i ось знову

Торвальдс, як завжди тішить своє чсв. Як кричати на поганий код так він перший, а те що ядро ще гірше наглухо ігнорується.

Будь-який чужий код поганий, навіть якщо його автор це ти сам, просто вже забув про це ;)

Імхо, сама відмова абсолютно нормальна. Не встигли в дедлайн — реджект, піде в наступний реліз. Неякісний код — реджект, перероблюйте. Звичайні робочі процеси.

Але от цей ось персональний бугурт «Як ви посміли, у мене відпустка» і «Ви на прицілі» — це якась дичина, вайби української бюрократії. Ніколи такого в опенсорсі не бачив, Лінус явно загнався.

Ніколи такого в опенсорсі не бачив, Лінус

Сміявсь.

Ви взагалі в курсі хто це?

Бо якшо так — ви б знали шо це він ще вєжліво.
Раніше шашкою до сідла розвалював одразу.

Я кажу про опенсорс загалом, а не конкретно про Лінуса як особистість.

«Як ви посміли, у мене відпустка» і «Ви на прицілі» — це якась дичина

це переклад — дичина. в оригіналі такого немає.

Лінус — красава. Казати «ні» поганому коду — це гарна якість. У Грега Хармана теж розвинуте почуття красоти і корсності коду, але, боюсь, якщо із Лінусом щось трапиться, ані Грег Харман, ані Максим Леві не втримають якість розробки ядра на поточному рівні :(

Проект давно вже вибудований із комьюніті сходним по структурі на FreeBDS. Тобто Лінус просто лідер проекту, та за різні підсистеми відповідають різні комітери. Власне на Лінуса так сакмо можуть запросто давити, той же Пентагон — через який в ядро пускають Rust де він зовсім не треба. Якщо же ви подиветесь на код ядра, там давно велика його частина це Intel.
Тобто коли Лінус піде на пенсію, просто буде знайдено іншого лідера, кардинали оберуть іншого Папу — усе що для цього потрібно Лінус зробив завчасно.

той же Пентагон — через який в ядро пускають Rust де він зовсім не треба.

кляті імперіалісти засирають ядро ржавим

Та давно dou.ua/...​us-defended-the-language
Насправді протистоянню багато років. Тому же комітету із провального Algol 68 (там вже в 64-му вставляли в мову те що зараз додають екстеншенами до С/C++ і йде вінушка за стандартизацію — наприклад корутини та векторні і матричні інструкції, лямбди і таке інше), а потім і теж в стутності провальний Ada (хоча діалект Ada PL/SQL досі собі живий) ніколи не подобалось, що мова C від AT&T Bell labs яка походить від Algol 60 через ре імпортований британський BCPL, з усіма старими проблеами, ще Algol 60 стала такою популярною. Обидва комітети створювались саме Пентагоном із консіліума передових вчених з компьютерних наук планети. Тоді як C був створений хакерами практиками з Bell Labs.
Усі члени того і наступних комітетів хаяли С а потім і С++ по чому світ. Починаючи від самих Ніклауса Вірта та Єдгера Дейстери, що стоворили спрощений Algol 68, тобто Pascal.
Щоправда проблеми у С та С++ тепер аналогічні проблемам які були в Algol 68 свого часу. В комітетах по стандартизації корпоративна війншука через конфлікт інтересів, Google та NVidea — требе braking changes для перформансу, а Microsoft навпаки нічого не ламати задля зворотної сумістності. І останні більш впливові в комітетах.

Ещё один пятидесятилетний подросток «с принципами».

Без принцыпов обычно спидозные поститутки с трассы, ну или политические проститутки и т.п. которым что водка что пулемёт, лиш бы с ног сшибало.
А так не нравится — всегда можно делать собственное ядро, или есть куча альтернатив : FreeBSD, NetBSD, L4, Minix3 и т.д.

Не Сі розробник, але спробую трохи розглянути і код і ситуацію:

На перший погляд, там сам RISC clk-rpmi.c драйвер розмістили, в основній папці,
а можна було б зробити як, наприклад, xilinx, в окремій
github.com/...​17-rc1/drivers/clk/xilinx
Знову, ж таки, заради чого?

В коді там різні підходи є — в clk окремі папки, а от в irqchip — просто згруповані по імені файли.

Мені здається, абсолютно нормально було виділити окрему ф-ію, тим більше що вона декілька разів використовується,
просто робити це в своїх файлах, а не в загальному.
Питання — а які ж там спільні include файли для платформи RISC — arch/riscv/include ? Не впевнений. Так одразу і не скажеш. Схоже, їх немає. А для інших платформ?

Але, наприклад, вписати просто код make_u32_from_two_u16 напряму, а не опосередковано, в виразах ’#define’ де вона використовується, наприклад в include/linux/mailbox/riscv-rpmi-message.h та arch/riscv/include/asm/sbi.h,
і окремо зробити подібне для make_u64_from_two_u32, було б можливо красивіше, не дивлячись на кілька дублювань. Наприклад,

#define RPMI_MKVER(__maj, __min)		(((u32)(hi) << 16) | (u32)(lo))

Втім, так одразу і не скажеш, бо кожен код має свій стиль, і потрібно звикнути до стилю, зрозуміти його, бути уважним, щоб красиво робити такі речі і не дублювати, не смітити.
І ще, буває, потрібно знати особливості білду.

Те що автор ввів ці ф-ії, замість того щоб писати напряму, то він просто підтримує консистентність в своєму коді, уникає дублювання, а от те що вніс це в загальний файл wordpart.h — власне і не сподобалось ревьюверу. Автор ніби хотів, щоб все було зовсім консистентно, як з lower_16_bits, але вийшло, що зробив зайве.

Оскільки, сам вираз не складний, тож Лінусу не сподобалось, що це виділили окремо, та ще й в загальному файлі. І, хтось може, випадково, використати інший word order (не ясно чому).

Кожен має шанси насмітити, будь-коли. Якщо Ви ніколи не помиляєтесь, це мабуть дуже добре, але, зазвичай, люди помиляються

Якщо Ви ніколи не помиляєтесь, це мабуть дуже добре, але, зазвичай, люди помиляються

Так тут не те питання, чувачок хотів з таким кодом бігом в реліз. При цьому зробив зміни в верхне поврхневий рівень асбстракції, який не стосується його функціоналу — що якби вже натякає на костиль. Вже це технічно може за афектити якісь інші вресії ядра потенційно, скажімо які базуються на Big Endian архітектурі процессора типу MISP чи PowerPC. Звісно тех лід, якого напевно попросили «пошвидше подивитисть бо бігом треба», подивився і сказів — ні, фіксите і в наступний реліз. А міняти вернхнповрхневі рівні взагалі не треба, бо тоді довдеться претестовувати усі архітектури підряд.

Linux kernel працює на багатьох платформах, як LE, так і BE, де порядок слів — різний. По-друге, така операція нерідко використовується в високонавантажених місцях і там потрібні для кожної архітектури свої оптимізації, тому наявність загальної функції просто зайве і вводить в оману, а на BE може призводити до неочевидних багів.

Не знаю, як на мене ідея вводити таку функцію це дурня.

Одне діло, коли така функція є, та знайомство з нею це частина культури на проєкті, вона у всіх в пальцях, типу htons. Але якщо за роки існування Linux така функція не зʼявилася, то скоріше за все вона не потрібна.

Коли та бачиш вираз, ти розумієш що там відбувається. Коли ти бачиш функцію, то... можливі варіанти. Який аргумент йде першим, lo чи hi? Чи немає додаткової магії? Треба йти перевіряти. А саме погане, це коли ти впевнений, що вона робить одне, бо ти це десь бачив, а вона робить трохи інше.

Далі, дублювання... Перевага від дублювання полягає у тому, що ми можемо замінити реалізацію функції, та це вплине на всіх, хто її викликає. От і питання, чи можна уявити такий сценарій? Я його не бачу, якщо треба змінити логіку, то скоріше за усе просто видалиться виклик функції на буде написаний новий вираз. Ніж по всьому проєкту заміниться логіка пакувати два слова у подвійне слово.

Тому декілька разів використовується це поганий аргумент, бо по суті ми замінюємо один рядок на інший. В одному вся інформація присутня, у другому прихована.

. І, хтось може, випадково, використати інший word order (не ясно чому).

якце чому, en.wikipedia.org/wiki/Endianness

Не Сі розробник, але спробую

може тому не потрібно спробувати, а почати з вивчення так званої бази

Я так розумію суть проста.

Дід особисто відповідальний за частинку ІТ на яку покладається все людство. І в цей його сповнений міркування, причин, наслідків і відповідальності світ прибігла молодь яка пише фронт на електроні і почала писать в пул реквест в ядро код типу
ololol_leftpad()

Діда бомбануло.
Підтримую діда.

Таке було на протязі усього проекту Linux. Коли Лінус був молодший він просто не підбирав слів і наприклад рекомедував вбити себе об стіну — бо тоді світ стане кращім місцем. Одного разу так і сталось, один з двох девелоперів які зробили конкуруючі рішення і ортримав відмову від Лінуса в рахунок коду іншого розробника і справді ...
З тих часів Лінус, особливо під впливом дружини постійно намагається підбирати слова і бути значно політ коректнішим. Особливо беручи до уваги, що розробникам ядра Linux Foundation не платить, навідміну наприклад від компаній які здійснюють донат коду типу : Red Hat, Intel, IBM, Google, Canonical і т.д.
А комерційній же чисто розробці, зазвичай менеджмент просто давить на розробників — «скоріше та дешевше» і закінчуюється усе часто як із багатьма версіями Windows (хоча є винятки NT 4, 2000, XP, 7 та 10). Ну або навпаки Mac OS X та FreeBSD ще жорсткіші вимоги щодо якості ніж у Linux.

Ok, то я напевно Just for Fun начитався.
2. Ту в цілому поганий гумор, коли щось кажеш публічно можуть бути люди с ментальними проблемами, а може і здорові які зрозуміють будь які такі речі буквально як погрози там і т.д. і підуть дуже далеко.
От скажімо Дональда Трампа намагались два рази застрелити, та це верхівка айсбергу — ще на першому строці в рідному Нью Йорку він вже жити не може, там сама скеретна служба ховалась як би протестувальники не набили морду.

Та там не треба все й дивитися, з посту Лінуса все зрозуміло. Якщо коротко, то замість використовувати (x<<16)+y написали «цілий хелпер», що робить uint32 з 2х uint16. Але по-перше, щоб зрозуміти порядок, треба дивитися код цього хелпера, а по-друге «щоб нах...я взагалі?!». Тим більше в коді ядра, де мамкіних кодерів ніколи не має бути.

виглядає як ідея для npm пакета.
А оскільки там make_u32_from_two_u16 і make_u64_from_two_u32 , то це вже 2 npm пакета

Дякую, додав посилання в текст

Давайте дождемся, когда Линусу будет 70 и послушаем про проституток и наркоманов.

думаєш, удєлає Байдена з Трампом разом узятих?

думаєш, удєлає Байдена з Трампом разом узятих?

В возрасте Линуса их обеих можно было к болячкам прикладывать.
Я даже рискну сказать, что 20 лет назад и Путин был вполне вменяем.

Якось я побачів, нещодавно дочка путіна давала інтерв’ю, склала дуже приємне враження, там явно відчувається Петербург, та напевно виховання матері. А спортсмени вони такі, власне це така характеристика спортсмена — гнути свою лінію навіть коли це вже дурість. Скажімо весь Еверест в небіжчиках які відмовились повернутись. І терер їх нема кому витягнути, ті хто йдуть після того як погода поліпшиться — йдуть вперед. 80 тисяч вкладених баксів і ідея фікс. При чому це не політ на Марс навіть, в не величезна космічна станція на якій можна досліджувати всесвіт, а не тільки планету з якою усе і так ясно.
Спортсмени будуть Вавилонську Башту.

За це власне і поважають Лінуса як тімліда, коли треба сказати ні — він каже ні. Цього разу він без матюків принаймні, як скажімо із блобами для uefy які взагалі взяли у Microsoft. Лінус не пускає наскороруч зроблену лажу в кодову базу Linux. Єдиним компромісом за увесь час він назвав код який взяли для реалізації X11.

Підписатись на коментарі