Рассматривается возможность перевода NTPsec на язык Rust или Go


Эрик Рэймонд (Eric S. Raymond), один из основателей организации OSI (Open Source Initiative), стоявший у истоков движения открытого ПО, изложил потенциальные планы по переводу разработки NTP-сервера NTPsec с языка C на более современный язык — Rust или Go.

Проект NTPsec стартовал в 2015 году как ответвление от NTP Classic, нацеленное на повышение безопасности. С тех пор была проведена чистка исходных текстов от устаревших возможностей, код приведён в соответствие стандартам C99/ANSI, функции работы с памятью и строками заменены на защищённые аналоги, не допускающие переполнения буфера, привнесены практики аудита кода, верификации и покрытия кода тестами.

Сегодня же, команда разработчиков NTPsec рассматривает возможность в перспективе перевести NTPsec на Rust или Go. Решение ещё не принято, но подготовка кода к такому шагу уже началась, например, код NTPsec избавляют от использования типов union и операций приведения типов (type punning). Рэймонд указывает срок 6–9 месяцев, в течение которого команда намерена принять окончательное решение и выбрать язык программирования.

Основными доводами в пользу смены языка является уход от небезопасных практик программирования на С, с целью повышения безопасности и надёжности NTPsec. Более конкретно, Рэймонд упоминает проблемы, вызванные выходами за границы буфера и висячими указателями (wild pointers), заявляя, при этом, что он готов отказаться от C, несмотря на всё то время, которое он с 1983 года и по сей день вложил в изучение C со всеми его нюансами, поскольку сегодняшние высокие требования к безопасности продолжают расти, пришла пора перейти на новый уровень и снизить частоту появления ошибок.

Эрик Рэймонд затрагивает и негативные стороны такого перехода, а так же способы решить потенциальные проблемы. Например, в случае перевода на Go проблемы могут быть вызваны остановками во время операций сборки мусора, что весьма критично для программы сихронизирующей точное время. Такие проблемы, вероятно, могут быть преодолены запретом сборки мусора на время выполнения критичного к задержкам кода.

©  OpenNet