LINUX.ORG.RU

Линус Торвальдс жестко отверг изменения архитектуры RISC-V для кода ядра Linux 6.17

 , , , ,


0

4

Линус Торвальдс со словами «no f%^5ing clue» и «Garbage» жестко отверг изменения архитектуры RISC‑V для кода ядра Linux 6.17. Обновления для RISC-V не войдут в новый цикл, и их придётся повторить для версии 6.18 позднее в этом году. Торвальдс называл по крайней мере часть предлагаемого кода RISC-V мусором, а также ответил разработчикам, что он был отправлен слишком поздно в течение окна слияния.

27 июля 2025 года Линус Торвальдс представил первый стабильный релиз ядра Linux 6.16 под кодовым названием Baby Opossum Posse (Отряд детенышей опоссума). «Стоит отметить, что предстоящее окно слияния для версии 6.17 будет для меня немного хаотичным: в августе у меня несколько семейных событий (свадьба и большой день рождения), и, поскольку семья разбросана не только по США, но и по Финляндии, я проведу около половины месяца в разъездах. Это значит, что я очень постараюсь сделать большую часть окна слияния за первую неделю перед началом моих поездок, и я уже предупредил об этом тех, кто обычно присылает мне больше всего pull requests», — предупредил ранее разработчиков Торвальдс.

Ожидается, что окно слияния Linux 6.17 завершится 10 августа с выпуском Linux 6.17-rc1. Для этой версии ядра предлагалось добавить RISC-V IOMMU к поддержке систем на базе ACPI, поддержку ACPI BGRT для отображения логотипов производителей при загрузке, обходные пути исправления ошибок, поддержку расширения Xmipsexectl, чтение типа MMU из дерева устройств, повышение производительности подкачки с учётом порядка байтов, поддержку kprobetrace, поддержку расширений MPXY и RPMI SBI, а также поддержку целостности потока управления с процессами пользовательского пространства. Однако этот pull request был отклонён Линусом Торвальдсом для Linux 6.17 из-за позднего обновления в окне слияния, особенно учитывая его зарубежные поездки на этой неделе. Он также оказался очень недоволен частью кода, включённого в этот pull request.

Торвальдс написал в рассылке для разработчиков ядра Linux:

«Нет. Это мусор, и он пришёл слишком поздно. Я запросил ранние pull request, потому что я в отъезде, и если вы не можете следовать этому правилу, хотя бы сделайте pull request хорошими.

Это добавляет разный мусор, не специфичный для RISC-V, но относящийся к общим заголовочным файлам.

И под «мусором» я имею в виду именно это. Это то, что мне никто никогда не должен присылать, не говоря уже о том, что он находится в конце окна слияния.

Вроде этого безумного и бессмысленного «помощника» make_u32_from_two_u16().

Эта штука делает мир действительно хуже для жизни. Это бесполезный мусор, который делает любого пользователя непонятным, и он действительно ХУЖЕ, чем отсутствие этого дурацкого «помощника».

Если вы запишете код как «(a << 16) + b», вы знаете, что он делает и где тут high word. Возможно, вам нужно добавить приведение типов, чтобы убедиться, что у «b» нет старших битов, которые загрязняют конечный результат, так что, возможно, он будет не совсем красивым, но и не будет неправильным и непонятным.

Напротив, если вы напишете make_u32_from_two_u16(a,b), вы ни f%^5ing clue не поймёте, какой порядок слов. Вау, вы только всё ХУЖЕ сделали, добавив этот «помощник» в универсальный файл, не относящийся к RISC-V, где, по-видимому, предполагается его использование для ухудшения другого кода.

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

Вы предупреждены: больше никаких поздних pull request и никакого мусора за пределами дерева RISC-V.

Теперь я надеюсь, что внутри частей RISC-V нет мусора, но это ваш выбор. Но в универсальных заголовках не должно быть ничего лишнего. И отправка большого pull request накануне. Окно слияния закрывается в надежде, что я слишком занят, чтобы беспокоиться об этом, — невыигрышная стратегия.

Так что вы можете попробовать ещё раз в версии 6.18. РАНЬШЕ, в том окне слияния. И без мусора.

>>> Подробности

★★★★

Проверено: hobbit ()
Последнее исправление: maxcom (всего исправлений: 3)
Ответ на: комментарий от seiken

в какое УГ, и как быстро превратится код Линукса, когда Линус уйдет на пенсию;

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

Если же разработка превратится в «комитетную» (как с C++), не факт, что будет лучше. С одной стороны, да, комитетная разработка гарантирует проекту статус «почти неубиваемого» (как с C++), с другой, значимые улучшения могут обсуждаться годами и в итоге принимаются компромиссные решения, которые никого толком полностью не устраивают (как с… ну ты понял).

обсуждая её в копролите (емейлы)

«Копролит» обеспечивает хранение всей истории обсуждения, причём во множестве копий по всему миру, никакому гитхабу такое не снилось. Скорострельности не даёт, ну так разработке ядра такая скорострельность, может, и не особо нужна? Но я не против, создай свой форк ядра с модными и молодёжными средствами обсуждения, может, у тебя действительно эффективнее получится.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

кандидаты есть, тот же Грег, например.

Что старше Линуса)

Тут не КПСС и не Единая Россия, возраст для такой деятельности имеет значение

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

Нет же. Речь идёт о том, что из представленного хелпера не очевидно, какое из двух 16-битных слов: a или b ставится на старшую позицию. То есть по заголовку функции не ясно, будет ли (a << 16) + b или (b << 16) + a.

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

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

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

«Копролит» обеспечивает хранение всей истории обсуждения, причём во множестве копий по всему миру, никакому гитхабу такое не снилось.

В отличии от того же Git, почтовые рассылки не умеют нормально хранить истории переписки. У каждого хранятся только фрагменты и некоторые сообщения могут потеряться.

Кстати GitHub умеет отправлять на почту или с почты ответы в issue если кому-то это так надо.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от hatred

Линуха больше штормило от utf8

Да, для ядра ОС это не лучшая кодировка. Если бы не файловые системы, то можно было бы ограничиться ASCII.

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

Несмотря на медленное принятие решений, c++ превратился в откровеннюйшую помойку. На одно полезное принятое изменение с десяток вредных.
В результате их «полезной» деятельности я полностью отказался от STL в своих проектах, используя только core фичи языка

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

Гита для обмена сообщениями пока не изобрели

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

В отличии от того же Git, почтовые рассылки не умеют нормально хранить истории переписки.

Ээээ, минуточку. Насколько я понимаю, обсуждения и вообще трекер – фича не git, а github или другого хостинга исходников или вообще стороннего багтрекера. А там уже никакой децентрализации и прозрачности нет, в отличие от самих исходников, которые, да, лежат в git.

P.S. Вот и @legolegs о том же.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от mittorn

Так я комментатору выше и говорю, чтобы с желаниями был поосторожнее. Вдруг сбудутся.

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

Из GitHub можно экспортировать комментарии к issue через GitHub Artifact Exporter. Не сам Git, но децентрализация возможна.

Если не ошибаюсь, Gerrit хранит коментарии в самом Git репозитории. Так что и такое возможно.

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

напомнило, как комментарии на govnokod.ru используют для хранения чего-то вроде форума/борды

mittorn ★★★★★
()

Прямо жёлтая пресса, а не новость.

jekader ★★★★★
()

жестко отверг

палец-то хоть показал?

со словами «no f%^5ing clue»

что, прямо вот так и написал? или это ТС у нас такой стеснительный?

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

Для проекта такого масштаба переезд на другую систему слишком проблематичен. Тут же не телеграмовский междусобойчик русских гайкистов, с сиськами и ржаками. Это подписи, безопасность и многое другое, гораздо важнее удобства заскочить с гифками на перевес. Ты же всё прекрасно понимаешь.

R_He_Po6oT ★★★★★
()
Последнее исправление: R_He_Po6oT (всего исправлений: 1)
Ответ на: комментарий от Nervous

Бритва Оккама — правило правой руки, отдающее предпочтение более простому объяснению. Бритва Рэнд — «The requirements of cognition determine the objective criteria of conceptualization». [италик мой]

Requirements of cognition — понятие открытое, но Рэнд даёт примеры, когда формирование концепций является обязательным:

There is a great deal of latitude, on the periphery of man’s conceptual vocabulary, a broad area where the choice is optional, but in regard to certain central categories of existents the formation of concepts is mandatory. This includes such categories as: (a) the perceptual concretes with which men deal daily . . . (b) new discoveries of science; (c) new man-made objects which differ in their essential characteristics from the previously known objects (e.g., “television”); (d) complex human relationships involving combinations of physical and psychological behavior (e.g., “marriage,” “law,” “justice”). [ITOE, 70]

В целом, «бритва» — это устоявшийся лексикон, но бритва Рэнд — понятие новое.

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

«Можно экспортировать» это совсем не то, что «распределены изначально». Вот исходники в git распределены изначально, да.

За наводку на GitHub Artifact Exporter спасибо. Правда, если имелось в виду это, то там висит настораживающая надпись «Этот репозиторий был заархивирован владельцем 9 января 2023 года. Теперь он доступен только для чтения».

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

This project has been archived. Please use the GitHub CLI instead.

Видимо устаревший способ. Теперь надо через GitHub CLI экспортировать.

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

Есть такая штука под названием git-bug. Позволяет хранить обсуждения прямо в репе в виде объектов.

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

Забавно. Но чем хуже (foo + bar)/2? Переполнение можно легко предотвратить:

if (foo > bar) bar + (foo - bar)/2;
else foo + (bar - foo)/2;

Больше слов, но все действия перед глазами, не нужно уходить в документацию. Правило округления тоже перед глазами: в сторону меньшего. В случае midpoint это неочевидно, поэтому указано в документации. Неочевидно и то, учитывал ли автор чужого кода особенности округления midpoint (в сторону первого аргумента).

Темплейты там нужны только из-за особенностей C++, который разрешает сложить массив с числом.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 2)

Опять истеричка топает ножкой и хочет синюю машинку вместо зелёной. ))

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

Вообще, это очень хорошо, что сейчас есть человек, который рулит политикой развития и принимает архитектурные решения без особой бюрократии

И я о том же говорю.

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

Это как бы его проект, прикинь. Не нравится — делай форк (лицензия GNU GPL v2 это позволяет) и делай что хочешь в рамках лицензии.

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

бритва Рэнд — понятие новое

А, понел — обобщение старой оккамовской.

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

Не нравится — делай форк

Еще одна причина, почему Линус перманентно трясется последние пару десятилетий. Это то, что практически весь вклад в ядро вносят «мегакорпы» типа Оракла, РедХата и Интела. Сейчас их всё устраивает, но в любой момент эти гиганты могут объединиться в консорциум и бортануть Линуса, его ядро и поддержку этого ядра.

Ну, а без поддержки ядро не моментально, но довольно таки быстро превратится в тыкву. Потому что такой массив кода нереально вывести чисто на энтузиазме.

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

Забавно. Но чем хуже (foo + bar)/2? Переполнение можно легко предотвратить:

% cat test.c
#include <stdint.h>
#include <stdio.h>

int main(void) {
	int32_t foo = -2000000000;
	int32_t bar = +2000000000;
	int32_t mid;
	if (foo > bar) {
		mid = bar + (foo - bar) / 2;
	} else {
		mid = foo + (bar - foo) / 2;
	}
	printf("%d %d %d\n", foo, mid, bar);
}

% cc test.c && ./a.out
-2000000000 -2147483648 2000000000

Ещё попытки будут? (:

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 2)
Ответ на: комментарий от hobbit

Если же разработка превратится в «комитетную»

Едва ли. Потому что топовые контрибуторы не академики, а корпорации. Там другой стиль управления.

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

Но сейчас всё всех устраивает. И до такого фазового перехода еще лет 20-30…

somemong
()
Последнее исправление: somemong (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Замечательно в расте с этим дела, язык всё-таки не на коленке сочиняли, например, можно как-то так:

trait MakeFromHalfs<Out> 
    where Out: Add<Output=Out> + Shl<usize, Output=Out> + Sized,
          Self: Into<Out> + Sized,
{
    fn add_low_half(self, lo: Self) -> Out {
        const {
            assert!( size_of::<Out>() == 2*size_of::<Self>())
        };
        let shift = 8*size_of::<Self>();
        (self.into()<<shift) + lo.into()
    }
}
impl MakeFromHalfs<u32> for u16 {}
impl MakeFromHalfs<u64> for u32 {}

pub fn main(){
    dbg!( 0u32.add_low_half(u32::MAX) );
    dbg!( u16::MAX.add_low_half(u16::MAX) );
}
[/app/example.rs:21:5] 0u32.add_low_half(u32::MAX) = 4294967295
[/app/example.rs:22:5] u16::MAX.add_low_half(u16::MAX) = 4294967295

https://godbolt.org/z/eshx1eqnb .

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

zurg
()
Последнее исправление: zurg (всего исправлений: 1)

А где очередной тред про Кента Оверсрача?

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

Без проблем. Но это как раз тот случай, когда деталей накопилось слишком много и хелпер обретает смысл. Не из-за того, что любая операция, обёрнутая в функцию, автоматически становится лучше. «Мы не одинаковы.»

#include <u.h>
#include <libc.h>

s32int
midpoint(s32int foo, s32int bar)
{
	if (!(bar > 0 && foo > INT32_MAX - bar) && !(bar < 0 && foo < INT32_MIN - bar))
		return (foo + bar) / 2;
	else if (!(foo < 0 && bar > INT32_MAX + foo) && !(foo > 0 && bar < INT32_MIN + foo))
		return foo + (bar - foo) / 2;
	else
		return bar + (foo - bar) / 2;
}

void
main(void)
{
	print("%d\n", midpoint(-2000000000, -2000000000));
	print("%d\n", midpoint(-2000000000, +2000000000));
	print("%d\n", midpoint(+2000000000, -2000000000));
	print("%d\n", midpoint(+2000000000, +2000000000));

	exits(0);
}
% 9c test.c && 9l test.o && ./a.out
-2000000000
0
0
2000000000
% 
kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от kaldeon

Это я к тому, что процедура вычисления среднего значения кажется простой, а на деле нюансов хватает. Поэтому вынесение её в библиотеку, где будет оптимальная реализация как для signed, так и для unsigned типов кажется не самым плохим решением.

Что касается сборки числа из байтов, тут я Линуса с одной стороны понимаю, в том плане, что это явно не в таком мердж-реквесте надо делать, с другой стороны сама по себе эта функция кажется полезной, и по-мне в ядре она нужна, просто нужно это согласовать заранее с тем же Линусом, чтобы было хорошее название и тп, и вводить в отдельном изменении, после чего надо бы отрефакторить весь старый код. А какой порядок байтов - это всё решается.

Хотя я не знаю, как Линус относится к таким рефакторингам. Возможно он из секты «работает - не трожь». Тогда видимо никак.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 3)
Ответ на: комментарий от vbr

Мудрите, если a и b одного целого типа, то:

avr = a/2 + b/2 + (a%2 + b%2) / 2.

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

Замечательно в расте с этим дела

А почему в машинном коде такая портянка? Там больше дюжины инструкций с call’ами получились. Есть способ привести в человеческий вид?

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

Это то, что практически весь вклад в ядро вносят «мегакорпы» типа Оракла, РедХата и Интела. Сейчас их всё устраивает, но в любой момент эти гиганты могут объединиться в консорциум

Разморозка к нам приходит
Разморозка к нам приходит
Разморозка к нам приходит
Разморозка к нам приходит
Разморозка к нам приходит
Разморозка к нам приходит

Скорей, оглянись (Разморозка к нам приходит)
Разморозка к нам стучится в дом (Разморозка к нам приходит)
Реальности приносит вкус бодрящий (Разморозка к нам приходит)
Реальности вкус всегда настоящий (Разморозка к нам приходит)

https://www.linuxfoundation.org/about/members

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

А ты как думаешь? Не учитываю последовательность байтов высылать "«(a << 16) + b»" в ядро это норм???

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

Можно ещё поизвращаться:

typedef union {
    struct { short low, hi; };
    long dword;
} dword;

Но в ассемблерном коде, если это не константы, всё равно будет сдвиг на 16 бит…

raspopov
()

Какой-то желтушный заголовок.

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

Обычный рабочий процесс, Линус просил не присылать и просил не делать, они прислали и сделали. В чём новость-то?

Полностью согласен. Я в оригинале не увидел никакой супер жёсткости. Да, засрали общие заголовочные файлы, приберите.

Категорично - может быть, но точно не жёстко. Он может намного жёстче.

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