Hacker News Digest

07 сентября 2025 г. в 23:53 • dmitrybrant.com • ⭐ 832 • 💬 275

OriginalHN

#linux#kernel#c#qemu#claudecode#llm#device-drivers#hardware

Using Claude Code to modernize a 25-year-old kernel driver

  • Увлечение — восстановление данных с кассет QIC-80 90-х гг.
  • Драйвер ftape (Linux 2.4) последний раз собирался ~2000 г.; с тех пор приходится держать CentOS 3.5.
  • Привод подключается к контроллеру гибкого диска: дёшево, но 500 Кбит/с и куча «магии» портов/IRQ.
  • Под DOS/Windows есть проприетарные утилиты, но только ftape даёт «сырой» дамп, независимо от формата ПО, которое писало кассету.

Цель: переписать драйвер под современное ядро без боли.
Инструмент — Claude Code (Claude 3.5 Sonnet) в режиме «актов» (акт = автоматический цикл «предложи-отладь-протестируй»).

Ход работы

  1. Запустил claude в каталоге исходников ftape-4.04 (1999 г.).
  2. Первый акт: «сделай модуль для ядра 6.10». Claude выдал:
    • заменил cli/sti на spinlock_t;
    • sleep_onwait_event;
    • register_blkdevblk_mq;
    • kmallockmalloc_array;
    • добавил MODULE_LICENSE/AUTHOR/DESCRIPTION.
      Собралось с десятком предупреждений.
  3. Акт 2: «убери варнинги». Убрал устаревшие ioctl, обернул printk в pr_*, добавил fallthrough;.
  4. Акт 3: «проверь на x86_64». Исправил longint в структурах, выровнял u8/u16 через __packed.
  5. Акт 4: «протестируй на железе». Создал QEMU-образ с контроллером FDC, подключил образ кассеты.
    • первый insmod — kernel oops; Claude добавил BUG_ON(!request_region) и проверку IRQ.
    • второй — ftape видит привод, но «unknown format»; Claude вставил распознавание QIC-80 по ID_CRC.
    • третий — успешный дамп 120 Мб за 40 мин.
  6. Акт 5: «очисти и оформи». Удалил весь #ifdef LINUX_2_0, добавил README.md, Kconfig, Makefile для in-tree сборки.

Результат

  • 2 500 строк C → 1 100; 45 файлов → 12; минус 4 архаичных под-драйвера.
  • Собирается как out-of-tree (6.6–6.12) и как in-tree (патч 30 Кб).
  • Скорость 470 Кбит/с — предел FDC, но стабильно.
  • Поддержаны только QIC-80; QIC-40/3010/3020 выкинуты (никто не просил).

Вывод
Claude Code способен переварить древний драйвер за вечер: сам генерит патчи, тестирует в QEMU и оставляет человеку только катать ленту.