Инженеры из компании Google выступили на конференции Linux Plumbers Conference с докладом (http://www.linuxplumbersconf.net/2017/ocw//system/presentati...), в котором рассказали об инициативе переноса в основное ядро оставшихся патчей от заброшенного последние несколько лет проекта LLVMLinux (http://llvm.linuxfoundation.org). В результате проведённой работы предоставлена возможность сборки LTS-ядер Linux 4.4 и 4.9 с использованием компилятора Clang. Поддерживается сборка для архитектур x86_64 и ARM64. Перед сборкой требуется наложение одного патча (4.4 (https://chromium.googlesource.com/chromiumos/third_party/ker...),
4.9 (https://chromium.googlesource.com/chromiumos/third_party/ker...)). Работа проведена в рамках инициативы по переводу сборочного инструментария Android и Chrome OS на использование Clang/LLVM.
Также можно отметить поддерживаемый одним из сотрудников Google репозиторий
clang-kernel-build (https://github.com/ramosian-glider/clang-kernel-build) и ветку в репозитории (https://chromium.googlesource.com/chromiumos/third_party/ker...) проекта Chromium с инструкциями и патчами для сборки ядра Linux 4.13 с использованием Clang.URL: https://www.linuxplumbersconf.org/2017/ocw/events/LPC2017/tr...
Новость: http://www.opennet.me/opennews/art.shtml?num=47232
Хорошая новость, по опыту разработки могу сказать, что clang имеет хороший статический анализатор (по сравнению с gcc). Например, в версии 3.9 он научился находить случаи использования variadic arguments с некорректными аргументами, которые были автоматически promoted до другого типа.
https://www.securecoding.cert.org/confluence/display/cpluspl...
> clang имеет хороший статический анализатор (по сравнению с gcc)то есть качество кода ядра такое хорошее, что этот компилятор теперь его может собрать? Улыбнуло. :)
> clang имеет хороший статический анализатор (по сравнению с gcc)Ну зачем же так, он не просто лучше чем никакой, он вообще довольно хороший.
То, что в GCC нет встроенного анализатора не отменяет того факта, что они существуют отдельно. Просто GCC не комбайн.
Ошибаетесь, есть.
-Wall -Werror
Можно ещё много чего включить:
https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Warning-Options...Помимо статического анализа он поддерживает динамический через ASAN, MSAN (не проверял), UBSAN и TSAN (этот не проверял).
Включается, соответственно, так:
-fsanitize=address
-fsanitize=memory
-fsanitize=undefined
-fsanitize=thread
Опция указывается и при компиляции в объектные файлы, и при линковке.GCC не так уж сильно отстаёт от clang в этом плане.
Это батенька не статический анализатор у вас там в gcc, а так, уровень дотошности.
Вы бы тихонько там посмотрели что умеет Clang LLVM, а потом бы уже писали.
Это вы, батенька, горячитесь.Я тут уже несколько лет вожусь с одним монструозным легаси сишным проектом, причём сборка по ряду причин идёт и свежим GCC и свежим Clang. Выглядит так, что они выровнялись где-то с год назад - во всяком случае, предсказать, кто следующий выдаст осмысленную ругань, я примерно с тех пор не могу - то один с новой версией что-то находит, то другой.
gcc 2.7.2 рулез форева! Ядро в три раза тоще и в 10 раз быстрее.
Разве gcc и clang не должны поддерживать стандартный C11 к которому и должен быть приведён код ядра линукс? Что ж там такое то в ядре и компиляторах твориться что ядро надо патчить чтобы оно собралось на другом компиляторе?!
Ну там же ссылка есть в новости, где можно посмотреть грядку патчей, которые нужны. Лень потыкать?Там разные причины, где-то clang глубже оптимизирует, из-за чего UB вылезает; где-то дело в багах clang'а; где-то грязные хаки ядра надо сделать менее грязными, чтобы clang их проглатывал бы молча, так же как и gcc; где-то разница во взаимодействии компилятора с внешними программами, скажем, то какие опции компилятор по умолчанию передаёт или не передаёт в gas;... Это то, что я высмотрел, рандомно тыкая по патчам. Ты можешь тоже потыкать и дополнить список.
Я тебя удивлю, но ядро написано не только на С...
а на чём ещё? asm - не в счет - шланг в него нормально умеет
Частично на perl, xml, mk, m4 и башизмах в sh-скриптах?
И? Причем здесь perl, xml, mk, m4 и баш к Clang?
это скорее про сборочное окружение.. от него тоже куча проблем для сборки клангом
Не удивил. Точнее удивил но по другой причине. Меня удивляет само существование людей думающих что они в состоянии судить об информированности собеседника по одному комментарию.
Уже не первый раз сталкиваюсь с подобным и каждый раз удивляюсь.
> стандартный C11 к которому и должен быть приведён код ядра линуксТорвальдс с Вами категорически не согласен и срать хотел на C11 и другие стардарты
Там до сих пор C89, по той причине, что Торвальдс не хочет, чтобы кто-то случайно закоммитил код, смешивающий код и объявления.
Там не только C89. Там много компиляторной магии от gcc. Собственно "поддержка компиляции с помощью clang" главным образом сводится к добавлению всех этих gcc'измов в шланг.Вот, допустим, начало мега-треда, где, кроме прочего, Торвальдса спрашивают, почему он не использует C11 атомики в ядре: https://gcc.gnu.org/ml/gcc/2014-02/msg00052.html
Так было давно уже, что они начали принимать патчи на C99.
На чистом C ядро написать невозможно.
> На чистом C ядро написать невозможно.Смотря что иметь ввиду под чистым С. Если отсутствие std библиотек - сложно, но возможно. Если же использование C++ - Там его нет.
Имелось ввиду, без использование Asm'а.
${любой_драйвер} невозможно написать с помощью чистого C.
> На чистом C ядро написать невозможно.Не удобно, но возможно.
> к которому и должен быть приведён код ядра линукс?С какого уя? Ядро - STD C90 максимум.
> в котором рассказали об инициативе переноса в основное ядро оставшихся патчей
> от заброшенного последние несколько лет проекта LLVMLinux
>llvm.linuxfoundation.org).Да! Хотелось бы услышать начальника транспортного цеха по ворпосу проблемы GPLinBase в этих самых --
>по переводу сборочного инструментария Android и
> Chrome OS на использование Clang/LLVM.Что там эти Гугле, Линукс-фондейшен, Эппле и пр. микрософты думают себе об этой назревшей и опухшей Проблеме?1 Когда уже, в конце-то концов!, переход на ядро FreeBSD и яблочный ld? А то ж многовато в одичавшей природе linux-ов стало.
>>по переводу сборочного инструментария Android и
>> Chrome OS на использование Clang/LLVM.
> Что там эти Гугле, Линукс-фондейшен, Эппле и пр. микрософты думают себе об
> этой назревшей и опухшей Проблеме?1 Когда уже, в конце-то концов!,
> переход на ядро FreeBSD и яблочный ld? А то ж многовато
> в одичавшей природе linux-ов стало.Гугл пилит Fuchsia, чтобы избавиться от легаси-ядра в Android'е: https://en.wikipedia.org/wiki/Google_Fuchsia
>>>по переводу сборочного инструментария Android и
>>> Chrome OS на использование Clang/LLVM.
>> Что там эти Гугле, Линукс-фондейшен, Эппле и пр. микрософты думают себе об
>> этой назревшей и опухшей Проблеме?1 Когда уже, в конце-то концов!,
>> переход на ядро FreeBSD и яблочный ld? А то ж многовато
>> в одичавшей природе linux-ов стало.
> Гугл пилит Fuchsia, чтобы избавиться от легаси-ядра в Android'е: https://en.wikipedia.org/wiki/Google_FuchsiaТам написано, что это предположения, а рыба молчит об лёд с головы...
Впрочем, позитивно: у Гугле [возможно-вероятно] будет ядро под пермиссивной лицензией с эппловым компилятором к своим ос с пермиссивными лицензиями. Это жжж здорово: станет _меньше_ смартфонов, микрософт снова станет делать телефоны... Можно ж будет даже исходники совсем-обратно позакрывать.
Эх, старые _добрые_ времена!! %-)
>>>по переводу сборочного инструментария Android и
>>> Chrome OS на использование Clang/LLVM.
>> Что там эти Гугле, Линукс-фондейшен, Эппле и пр. микрософты думают себе об
>> этой назревшей и опухшей Проблеме?1 Когда уже, в конце-то концов!,
>> переход на ядро FreeBSD и яблочный ld? А то ж многовато
>> в одичавшей природе linux-ов стало.
> Гугл пилит Fuchsia, чтобы избавиться от легаси-ядра в Android'е: https://en.wikipedia.org/wiki/Google_FuchsiaУдачи им, как там, кстати модульный телефон?
Linux ядро - лучшая часть андроида, без него очередной симбиан ос будет с понятной судьбой.
> Linux ядро - лучшая часть андроидаНе знаю даже, чем вызвано такое заявление. Я пользуюсь Android'ом, и я конечно знаю, что там внутре неонка^W линукс, но это никак не сказывается на моём опыте общения с андроидом как пользователя. То есть, мне как пользователю совершенно фиолетово, какое там ядро, хоть ntoskrnl.exe. А как программисту мне опять же фиолетово, потому что насколько я знаю, программирование под андроид -- это общение с джавовыми API, вне зависимости от выбранного мною языка программирования. Какая разница, какое там ядро прячется в глубине?
>Какая разница, какое там ядро прячется в глубине?Стоимость.
>>Какая разница, какое там ядро прячется в глубине?
> Стоимость.Да ладно. Стоимость давно зависит не от стоимости компонентов, а от готовности потребителя платить.
Большая. Потому что "глубина" сказывается на качестве работы.
> А как программисту мне опять же фиолетово, потому что насколько я знаю,
> программирование под андроид -- это общение с джавовыми API, вне зависимости
> от выбранного мною языка программирования. Какая разница, какое там ядро прячется
> в глубине?Открой для себя Android NDK и прелести писанины на C/Asm под ARM/Linux
https://github.com/googlesamples/android-ndk/blob/master/nat...
>> А как программисту мне опять же фиолетово, потому что насколько я знаю,
>> программирование под андроид -- это общение с джавовыми API, вне зависимости
>> от выбранного мною языка программирования. Какая разница, какое там ядро прячется
>> в глубине?
> Открой для себя Android NDK и прелести писанины на C/Asm под ARM/Linux
> https://github.com/googlesamples/android-ndk/blob/master/nat...Это бинды к жаба-коду, то есть способ запуска жабы из "нативного" кода. Вот уж удовольствие, писать на asm'е, чтобы вызывая любую апишную функцию, заниматься конвертацией каждого int'а в аргументах в жабовский формат, а потом дёргать jvm.
>>> А как программисту мне опять же фиолетово
>> Открой для себя Android NDK
> Это биндыЭто примеры. Под андроед-ядро можно прекрасно писать на Ц/Ц++ и грузить свой бинарь/либу
>>>> А как программисту мне опять же фиолетово
>>> Открой для себя Android NDK
>> Это бинды
> Это примеры. Под андроед-ядро можно прекрасно писать на Ц/Ц++ и грузить свой
> бинарь/либуНу и? Допустим, что в андроеде сменилось ядро, как это отразится на написании этого кода?
Дайте угадаю, будет как с ZFS. Cначала кpасноглазыe шипели и хвалились бтрфс, а потом дружненько перешли на ненавистную им ZFS. Да еще и зрадник красношапка положил болт на их любовь.В ближайшее время ждем новостей в стиле "линукс только выиграл от перехода на clang. gcc не нужен."
> Дайте угадаю, будет как с ZFS. Cначала кpасноглазыe шипели и хвалились бтрфс,
> а потом дружненько перешли на ненавистную им ZFS.Вы говорите с голосами в своей голове
> Дайте угадаю, будет как с ZFS.но смисел?
> Дайте угадаю, будет как с ZFS. Cначала кpасноглазыe шипели и хвалились бтрфс,
> а потом дружненько перешли на ненавистную им ZFS.хто, хто все ети льюди? Куда и когда они перешли?
редхат покупает пилильщиков тру олдскульных линуксных решений - и именно их пихает в свои рекомендации. Вечно жить с lvm, xfs и ext4 (которую редхат, кстати, почему-то не очень любит - видимо, потому что ее любит гугль),приделывая к ним дедап, сжатие и т д (а шифрование уже есть).
> будет как с ZFSА что с ним?
> а потом дружненько перешли на ненавистную им ZFS
Кто там перешёл? 1% серверов, хостерами которых являются энтузиасты? Ну да, ну да.
> Да еще и зрадник красношапка положил болт на их любовь.
Красношапка компашка похуже M$.
> линукс только выиграл от перехода на clang
Линус покажет известный жест шлангу и всё останется по старому.
от бтрфс отказались только красношляпники, да и те только из-за NIH. Причем в пользу не ZFS, а какой-то своей хипстерской приблуды на Rust. Основные разработчики бтра (сусе, фейсбук и т.д.) продолжают его пилить.
> В ближайшее время ждем новостей в стиле "линукс только выиграл от перехода
> на clang. gcc не нужен."тогда уж "торвальдс-ФоКо перешёл на цланг -- РХЕЛ переходит на Hurd"?
--нужно больше голосов в голове!
>рассказали об инициативе переноса в основное ядро оставшихся патчей от заброшенного последние несколько лет проекта LLVMLinuxКак там поживает средний палец Торвальдса? ;)
> git clone https://chromium.googlesource.com/chromium/src/tools/clangШо, гугла свои трояны теперь прям в шланг пихает?
.