Раскол в сообществе разработчиков nMigen (Amaranth)

Я надеюсь, эта статья будет интересна разработчикам электроники, поскольку речь всё-таки пойдёт об инструментах RTL-синтеза. Ещё больше я надеюсь заинтересовать организаторов и активных участников различных сообществ свободных программ и «железа».

Для раздела новостей статья явно запоздала, так что мне остаётся только добавить побольше подробностей и субъективных комментариев. Но для начала я кратко обозначу, что было что и кто был кто в сообществе nMigen на начало декабря 2021 г.

Диспозиция

nMigen — язык синтеза цифровой электроники, снаружи представляющий собой DSL, написанный на Python 3, а под капотом использующий Yosys. Автором и бессменным основным контрибьютором nMigen является Whitequark.

nMigen — концептуальный наследник Migen. Migen разрабатывался как открытый проект с 2007 года Себастьеном Бордодюком (Sébastien Bourdeauducq), в то время — студентом французской Высшей школы электричества. В качестве дипломного проекта Себастьен решил реализовать в FPGA систему, способную воспроизводить визуальные эффекты, алгоритмически аналогичные реализованным в MilkDrop. Проще говоря, задача состояла в том, чтобы заставить FPGA соревноваться с не самыми последними десктопами того времени.

КДПВ взята из статьи о MilkDrop в Википедии
КДПВ взята из статьи о MilkDrop в Википедии

Смелая идея Себастьена, заключавшаяся в том, что использование инструментов сверхвысокого уровня вместо традиционных низкоуровневых Verilog или VHDL способно значительно ускорить разработку сложных цифровых схем, принесла плоды как на академическом поприще, так и в бизнесе: Себастьен окончил магистратуру и основал компанию M-Labs.

В декабре 2018 года Whitequark, в то время работавшая в M-Labs, опубликовала на GitHub свои предложения по дальнейшему развитию Migen, причём сразу в виде относительно работоспособной реализации, написанной «с нуля». Главными преимуществами этой реализации были:

  • синтаксис, ориентированный больше на абстрактный бэкенд, чем на генерацию Verilog,

  • использование ООП для упрощения композиции кода,

  • возможность использования нескольких тактовых сигналов.

Но по каким-то причинам (возможно, из-за конфликта Whitequark с работодателем) эти предложения не были приняты в M-Labs, и nMigen ушёл в свободное плавание.

Успех

В 2020 годах nMigen становится популярным среди радиолюбителей. Появляются многочисленные публикации на сайтах DIY-тематики, туториалы и «батарейки«. Многие пользователи отмечают такие преимущества nMigen, как низкий порог входа по сравнению с Verilog/VHDL, простую верификацию и отладку схем, беспроблемную поддержку основных FPGA-тулчейнов, как открытых, так и проприетарных.

Профессионалы тоже не стоят в стороне. Два наиболее значительных проекта, построенные на основе nMigen:

  • Libre-SOC — универсальная система, основанная на оригинальной реализации 64-битной Power ISA с векторными расширениями, недавно получившая первый тестовый кремний,

  • USB-тулкит Luna от Great Scott Gadgets (это и открытая библиотека, и готовая плата с FPGA, которую можно использовать, например, как USB-сниффер).

Раскол

К сожалению, успеху инженерных проектов нередко сопутствуют проблемы нетехнического толка. В 2021 году M-Labs получает (со второй попытки) свидетельство USPTO №6318709 о регистрации торговой марки «nMigen» в США.

Далее события развиваются следующим образом. Whitequark переименовывает nMigen в Amaranth, подчищает репозиторий от большей части упоминаний торговой марки и сообщает (IA) об этом в Твиттере 10 декабря.

M-Labs тем временем пытается получить контроль над проектом-заглушкой https://github.com/nmigen/, о чём 16 декабря Whitequark получает уведомление от Github Trust & Safety. По всей видимости, Whitequark удалось сохранить право на этот проект согласно доктрине prior use.

А 31 декабря основатель Libre-SOC, Люк Лейтон (Luke Kenneth Casson Leighton) публикует через список рассылки следующее сообщение (IA):

Libre-SOC, один из основных пользователей nmigen, создающих открытый код, теперь является официальным мейнтейнером nmigen 1.0 согласно лицензии, данной M-Labs, владельцем торговой марки «nmigen». Новый дом сообщества nmigen теперь находится по адресу: https://gitlab.com/nmigen

Вслед за этим Whitequark удаляет аккаунт Люка из IRC-канала поддержки пользователей Amaranth.

Попытка анализа

Дальше следуют мои размышления post factum. Я не претендую на истину в последней инстанции, но некоторая степень моей вовлечённости в ситуацию не позволяет мне ограничиться голыми фактами.

Себастьен Бордодюк и M-Labs

Приоритет Себастьена в отношении подхода, используемого в HDL нового поколения, для меня несомненен. Возможно, чьи-то академические эксперименты и предшествовали Migen, но практические реализации — MyHDL, Chisel, SpinalHDL — возникли намного позже.

В то же время nMigen/Amaranth представляет собой совершенно самостоятельную ветвь развития данной идеи, и вовлечённость M-Labs в эту конкретную ветвь целиком и полностью ограничивается регистрацией торговой марки. M-Labs не коммитит в какой-либо форк nMigen, не имеет проектов, написанных на nMigen, не оказывает каких-либо сопутствующих услуг и т. д. Да и законность удержания торговой марки в данных обстоятельствах наверняка можно оспорить в суде.

Я считаю, что действия Себастьена Бордодюка могут быть обусловлены одним из двух мотивов: наказать бывшего работника (Whitequark) или получить какую-то выгоду от наличия торговой марки как таковой (IP-троллинг). А возможно, и обоими мотивами одновременно.

В любом случае, позиция M-Labs не вызывает симпатии ни у меня, ни и у большинства пользователей.

Люк Лейтон и Libre-SOC

Между Люком и Whitequark долго существовали разногласия технического толка. Люк упоминал в списке рассылки невозможность протолкнуть тот или иной патч в nMigen и связанные с этим костыли. Будучи немного знакомым с Люком по переписке, я описал бы его как программиста-перфекциониста и фаната идиоматичного Пайтона (для меня это скорее комплимент, чем критика). И я согласен с Люком в том, что код nMigen/Amarant далёк от совершенства. Таким образом, я хорошо понимаю его желание заняться поддержкой nMigen. Что же касается возможностей, то Libre-SOC имеет гранты от NLNet на любую деятельность, способствующую развитию производства микросхем в Европе, а также внимание некоторого числа профильных инженеров. Как говорится, pourquoi pas?

Меня в этой ситуации смущает только одно обстоятельство: пресловутая «лицензия» M-Labs. Люк не новичок в опенсорсе, и должен прекрасно понимать, что для создания форка nMigen не нужна никакая лицензия, кроме разве что 2-clause BSD, под которой nMigen опубликован. Аффилированность с M-Labs не принесёт никакого профита, зато может оттолкнуть некоторых коммиттеров.

Whitequark и Great Scott Gadgets

Здесь ситуация довольно прозрачна. Whitequark принимает патчи от Great Scott Gadgets (возможно, в приоритетном порядке), а Great Scott Gadgets выражает свою приверженность Amaranth. Что вызывает моё беспокойство по этому пункту, так это состояние здоровья Whitequark.

Последствия

Удар был нанесён. Пока что всё движется по инерции, но единый универсальный инструмент, поддерживаемый широким кругом пользователей и контрибьюторов, уже начал превращаться в два маржинальных тулбокса: nMigen для Libre-SOC и Amaranth для Luna.

Негативных последствий тут два.

  1. Инструменты для внутреннего использования никогда не получают должного уровня внимания и поддержки, разрабатываются по остаточному принципу, поэтому обречены на стагнацию. Следующее поколение разработчиков выбросит их за неадекватностью.

  2. Мелкие пользователи — DIY-энтузиасты, студенты и т. д. — вынуждены тем временем подбирать крошки с корпоративного стола. Их мерж-реквесты и тикеты остаются без внимания; они создают сотни форков, но найти среди них тот, который решает конкретную проблему, закрывает конкретный баг, практически невозможно. В конце концов пользователи уходят.

Решением обеих проблем была бы передача управления nMigen/Amaranth некоему независимому лицу или комитету, заинтересованному в максимальной публичности, балансе интересов пользователей и росте сообщества. Но пока о таком можно только мечтать.

Читайте так же: