[ВНЕЗАПНО] Clang собирает Linux
В список рассылки cfe-dev пришло письмо с описанием успешного эксперимента по сборке ядра Linux с помощью компилятора Clang.
Специально для Ъ переведу часть письма (disclaimer: перевод неполный и местами достаточно вольный; правильнее даже назвать его пересказом):
Clang компилирует работающее ядро Linux (версия 2.6.36, SMP).
Общие детали
============
* Разработка и тестирование проводились на Macbook 5.1 (Intel C2D, x85_64) под управлением Debian GNU/Linux
* Ядро успешно загружается до runlevel 5 (X + сеть) на макбуке - как на настоящем железе, так и в qemu
* Ядро успешно загружается до runlevel 3 на второй тестовой машине, microATX desktop box (Intel Atom). Запустить X на этой машине мне пока что не удалось
* Ядро собирает само себя; в данный момент я работаю на «четвёртом поколении» самосборного Linux, собранного с помощью «четвёртого поколения» Clang
Основные успешно собранные подсистемы
=====================================
* Ключевые части ядра, файловые системы, шины, PCI, ACPI - не столкнулся ни с какими проблемами. Хотя стресс-тестирования не проводил.
* SMP, SMT, SysV, pthreadsm Posix IPC - тщательно протестированы и в основном работают нормально (есть некоторые проблемы с многозадачностью в user-mode).
* NUMA, swap, mm, аллокатор slab - с памятью всё хорошо, утечек по результатам тестирования не найдено
* Сеть (IPv4) - IPv4 работает нормально, за исключением IPSec. Netfilter и IPv6 независимо друг от друга вызывают зависания, однако есть идеи, как их можно пофиксить.
* Драйвера и firmware - в целом, ведут себя хорошо. Однако есть проблемы с драйверами, использующими криптографию (даже базовые процедуры ядра по вычислению crc). По крайней мере, удалось собрать и запустить (на макбуке) следующие драйвера:
** Графика и звук, вплоть до работающего под Flash видео
** Клавиатура. Не мигают светодиоды, но они и не нужны.
** DVD/CDROM
** Тычпад
** Всякие USB-штуки
** iSight
** Спикер
Менее важные подсистемы, которые не удалось собрать
===================================================
Возможно, какие-то из этих проблем были вызваны моими хаками в Clang, Linux или же конфигом ядра Linux. Что-то также мог забыть упомянуть.
* SELinux, Posix ACLs, IPSec, eCrypt и всё, что использует API для криптографии. В основном проблемы возникают из-за массивов переменной длины, которые используются в ряде структур - такое вот расширение GNU, не поддерживаемое другими компиляторами.
* IPv6 и Netfilter. Часть проблем с ними вызвана криптографией, а часть своя собственная.
* Виртуализация. Пока просто не собирается.
Проблемы, решаемые компиляцией с помощью GCC
============================================
* VDSO. При сборке с помощью Clang непонятным образом падает. При сборке с GCC работает.
* Boot. Код для первых шагов загрузки не собирается clang'ом (мешает инлайновый ассемблер, ещё одни расширения GNU). Проблема локализована, но пока что не ясно, как её решать.
Существенные проблемы
=====================
* Модули. Не загружаются. Примерно понятно, как это можно исправить, но работы придётся сделать довольно много.
В общем, автор полон энтузиазма и готов продолжать работать дальше. Он собирается поднять и поддерживать репозиторий, содержащий патчи, необходимые для сборки ядра clang'ом, и вообще хочет добиться production-уровня качества собираемого ядра. Ну и самому clang тоже достанутся плюшки патчи.
К обсуждению приглашаются эксперты, желающие высказать авторитетное мнение относительно данной истории успеха, личности автора/переводчика, нужности/ненужности Clang, GCC, Linux, FreeBSD, Apple, RMS, выпивки, женщин, блэкджека и далее по списку.