8-битный чип AVR64DD32 стоимостью около $1,30 научили отдавать сайт на микроконтроллере через интернет. Не полноценный веб-хостинг в привычном смысле, а одну страницу по одному URL, но сам факт показателен: даже на предельно скромном железе TCP/IP и HTTP все еще можно дотащить до рабочего состояния, если хватит упрямства и нескольких дней на код.
Эксперимент собрал европейский разработчик и блогер Маурицы Залевский, сообщает The Register. В основе проекта — микроконтроллер AVR64DD32: один 8-битный AVR-ядро с частотой до 24 МГц, 8 КБ SRAM, 64 КБ flash и 256 байт EEPROM. Сам чип у DigiKey, по данным издания, стоит $1,30, а полный набор деталей с платой, конденсаторами и резисторами тянет скорее на $2-3. Для любого, кто привык измерять инфраструктуру в vCPU, гигабайтах RAM и счетах от облака, звучит как инженерская шутка. Но шутка, у которой есть работающий код.
Главная проблема была не в том, чтобы мигать светодиодом и красиво фотографировать плату для блога, а в реальной сетевой части. По словам Залевского, выводы ввода-вывода у AVR упираются в 12 МГц, поэтому обычный Ethernet для такой схемы не подошел. Даже старый 10BASE-T слишком быстрый для этого класса устройства, а Manchester-кодирование еще и удваивает нагрузку на линии: 10 мегабит полезных данных на проводе превращаются фактически в 20 мегабит сигналов. Нормальный путь в такой ситуации — взять отдельный Ethernet-контроллер, но разработчик не захотел ждать поставку и пошел в обход.
Вместо Ethernet он использовал SLIP — Serial Line Internet Protocol, протокол конца 1980-х, который когда-то помогал гонять IP-трафик по последовательным линиям. Для массового веба это почти археология, но в мире встраиваемых систем SLIP до сих пор живет именно потому, что он прост, компактен и не требует лишнего железа. Для Linux его поддержка остается штатной, так что связка «микроконтроллер плюс современная машина» в таком сценарии вполне реальна. Если убрать романтику, именно тут и проходит практическая граница проекта: это не попытка заменить обычный стек веб-сервера, а демонстрация, насколько далеко можно зайти, если экономить каждый такт, каждый байт памяти и каждый компонент в спецификации.
Поднять канал связи оказалось только половиной дела. Куда интереснее, что Залевскому пришлось вручную разбираться с логикой сетевых пакетов и реализацией TCP. По его словам, микроконтроллер мог формировать ответные пакеты, переставляя адреса источника и назначения у входящего трафика и сбрасывая TTL, но на то, чтобы заставить TCP работать как надо, ушло несколько дней. С HTTP он обошелся куда прагматичнее: сервер возвращает один и тот же жестко зашитый ответ на любой запрос. Поэтому сайт на микроконтроллере здесь — это буквально одна страница по одному URL, без роутинга, без статики, без CMS и без иллюзий насчет масштабирования. Если на такой «хостинг» придет толпа посетителей, эксперимент быстро напомнит, почему индустрия вообще ушла далеко вперед от 8-битных контроллеров.
Отдельно любопытно, как был решен вопрос с доступом из внешнего интернета без покупки публичного IP-адреса. Микроконтроллер у разработчика находится дома, а запросы до него доходят через WireGuard-туннель до машины в дата-центре в Хельсинки, которая уже проксирует трафик во внутренний адресный блок. Иначе говоря, посетители подключаются не напрямую к TCP/IP-стеку микроконтроллера, а через промежуточную инфраструктуру. Для пуристов это может звучать как «нечестно», но по инженерным меркам как раз наоборот: проект не маскирует ограничения, а честно их обходит минимальными средствами. К тому же в этом и есть вся суть подобных конструкций — не построить новый стандарт, а показать, где именно находится нижняя рабочая граница.
Для разработчиков здесь сразу несколько полезных выводов. Первый: современные веб-стеки давно скрыли от нас цену абстракций, и подобные проекты хорошо возвращают чувство масштаба. Когда страница помещается в десятки килобайт flash, а TCP требует дней ручной доводки, иначе начинаешь смотреть на очередной фронтенд-бандл размером в несколько мегабайт. Второй: встраиваемая разработка по-прежнему держится не на магии SDK, а на понимании протоколов, ограничений шины, таймингов и сетевой механики. Третий: такие эксперименты полезны не только как «смотрите, как я могу», но и как обучающий материал для тех, кто работает с IoT, промышленной автоматикой и edge-устройствами, где компромиссы по памяти, энергопотреблению и цене никуда не делись.
Для бизнеса история тоже не совсем бесполезная, даже если никто всерьез не собирается переносить лендинг компании на AVR. Себестоимость железа в $2-3 показывает, насколько дешевой может быть точка публикации простейшего сетевого интерфейса, если задача очень узкая: отладочная страница, диагностический эндпойнт, сервисная панель, телеметрия. Понятно, что в реальном продукте быстро всплывут вопросы безопасности, отказоустойчивости, обновлений и нормального сетевого контроллера. Но сам тренд очевиден: граница между «устройством» и «веб-сервисом» продолжает размываться, и даже предельно бюджетное железо может говорить на языке интернета, пусть и с сильным акцентом.
Самое интересное в этой истории не то, что кому-то удалось поднять сайт на микроконтроллере за пару долларов, а то, насколько низко сегодня можно опустить порог рабочего сетевого узла, если отказаться от комфорта. Для одних это просто техно-курьез, для других — напоминание, что интернет по-прежнему держится на протоколах, а не на маркетинговых слоях поверх них. И если разработчик приложил исходники и готовый бинарник, у этой идеи почти наверняка появятся продолжения — еще более странные и, возможно, еще более поучительные. Подробнее об эксперименте пишет .