Из ядра Linux выпилили strncpy: шесть лет, 362 коммита, одна функция

19 июня Линус Торвальдс влил merge, который убрал из ядра Linux функцию strncpy — шесть лет работы, 362 коммита, семьдесят человек ради одной функции стандартной библиотеки C. Разбираю, почему «просто заменить небезопасную функцию» в C совсем не просто: strncpy только выглядит как «безопасный strcpy» из-за параметра n, а на деле это даже не строковая функция, а реликт fixed-width полей из AT&T Unix 1979 года. Главное в истории не сам выпил, а его цена: заменить нельзя автозаменой, потому что каждый из 362 вызовов требует понять намерение — нужна C-строка, padding или бинарное поле. Урок выходит за пределы ядра: в любой C/C++ базе на проде strncpy — это не баг, а код, который надо перечитать.


















