Проект GNU опубликовал выпуск библиотеки libmicrohttpd 1.0.0, который отмечен как первый стабильный релиз за 16 лет существования проекта. Библиотека написана на языке Си и представляет простой API для встраивания функциональности HTTP-сервера в приложения. Среди поддерживаемых платформ: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 и z/OS. Код распространяется под лицензией LGPL 2.1+. В собранном виде библиотека занимает около 200 КБ и использует в зависимостях только libc и libgnutls при сборке с поддержкой TLS...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=60540
http as a service.
> http as a service.Почти. На ней мелкие HTTP серваки встроенные в программы делают. Довольно норм для этих целей так то.
И чо, есть примеры тех, кто делает?
> И чо, есть примеры тех, кто делает?Дешево и сердито - reverse deps в своем дистро лукапнуть кто от него depends. Их есть.
Collectd - кажет в вебфейс свои графики. Debuginfod - понятно чего. Motion (охранка, движение на камере) - может морду казать. Некоторые части systemd, kodi (мульмимедиа-центр) и еще всяких разных, (не)полный список вооон там.
> Некоторые части systemdЭто всё объясняет.
>> Некоторые части systemd
> Это всё объясняет.Что это объясняет? Что поцтер может вместо изобретения вела взять существующую либу? Он это и с рядом других либ проделал так то. С таким же успехом можно кивать на допустим LZ4 какой (которым оно может [опционально] жать журналы в journald). Но вы конечно можете не пользоваться LZ4 потому что им системд пользуется, такое отмораживание ушей назло бабушке будет смешно.
И нет, ни libmicrohttpd ни lz4 какой не писали "специально для системд". Это совершенно отдельные либы от других людей.
> релиз за 16 летэто 2008 год, а в 2009 появился go, где всеgo gораздо больше и вкуснее, для встройки какой мб.
32 килобайта?
И еще плюс десяток мегабайт при "libgnutls при опциональной сборке с поддержкой TLS"
Этот тот язык с GC? Спасибо, перетопчимся
Ну, вы 16 лет топтались и ещё потопчетесь на месте столько же)
Ну кто-то топтался, а кто юзал lwan или libwebsockets
Ну с 2000ых я много языков повидал. Про php, c#, java, perl и даже delphi тоже так говорили (не говоря уже о менее популярных). И где они теперь?
А си как был, так и остался.
В топе уязвимых технологий?
> И где они теперь?На пыхе пол-инета работало, да и сейчас много где осталась.
Шарп открыз часть рынка у пыхи + прикладной
На джаве почти весь банковский сектор
Делфи да, помер... осталось только легаси за мульоны денег.
А перловка как была не нужна, так и осталась.А где сишка? Прокладка для запуска этого всего добра? Причем дырявая...
Пых от C лучше не отделять. Говорим пых, в уме держим C, потому что пых это в том числе обвязка для кучи библиотек на оном.
> Шарп открыз часть рынка у пыхи + прикладнойИ чего бы это из писаного на пыхе было заменено на дотнетчину? Я так сходу не могу ни 1 програмы придумать. Скажем ни 1 приличного форумного движка на дотнете я вообще ни разу не видел, а чтоб там еще и юзери были....
> Скажем ни 1 приличного форумного движка на дотнете я вообще ни разу не виделА на пыхе, значит, видели?
>> Скажем ни 1 приличного форумного движка на дотнете я вообще ни разу не видел
> А на пыхе, значит, видели?Разумеется. Более того - в какой более-менее юзабельный форумный двигун не ткни это пых окажется. Что phpbb3, что livestreet хаброобразный, что почти любая другая байда - но вот форумного софта на других яп почти и нет по сути. Или какие-то страшенные уродцы как максимум.
В смысле, где.
C - это мейнстрим.
PHP - это мейнстрим.
Java - это мейнстрим.
C# - это альтернативный мейнстрим с претензиями на место жабы.
Остальное, всякие руби и прочее - да - просто сдохло, столько банально не надо. Игогошечки с хрустами на очереди в этот же ряд.
>язык с GC? Спасибо, перетопчимся- в Вашем дистрибутиве уже устранили баг: CVE-2023-4911 (позволяет локальному злоумышленнику получить root-привилегии, используя переполнение буфера в динамическом загрузчике ld.so библиотеки GNU C)?
Предлагаешь линковщик ld.so переписать на рас^W go?
Предлагаю по возможности не использовать ld.so в своих программах (давно так делаю, жить стало сильно легче).
> Предлагаю по возможности не использовать ld.so в своих программах (давно так делаю,
> жить стало сильно легче).Это врядли - без реюза библиотечного кода программы как раз таки тяжелеют.
На проде они всё равно запускаются в изолированном корне (не устраивать же в системе свалку из кучи демонов).
> На проде они всё равно запускаются в изолированном корне (не устраивать же
> в системе свалку из кучи демонов).Изоляция - понятие относительное. Полный unshare файлов и памяти можнор так то и не делать, только логическую изоляцию файловых иерархий и проч.
И даже "свой корень" никак не запрещает ему физически указывать на те же файлы или блоки, а то и те же страницы в памяти. При помощи KSM к тому же эту абстракцию можно доразвить, куча оперативы - изниоткуда. Системд даже умеет его нынче включать для тех или иных штук, чуть ли не всей системеме можно врубить.
В своим хеллоуворлдах можешь хоть статически все собирать, только причем тут ты и твои программы?
В качестве примера разумного поведения.
Я вот смотрю по сторонам и никак не вижу локального злоумышленника! А сам и так могу получить root - без взлома! Т.е. речь идет о каких-то публичных серверах, где бродят толпы посторонних пользователей.
>смотрю по сторонам и никак не вижу локального злоумышленника!- таким злоумышленником может быть установленное приложение или вирусняк
> Я вот смотрю по сторонам и никак не вижу локального злоумышленника!Да вы и удалённого злоумышленника не увидите, потому что он к вам сзади подойдёт.
Зачем GO? В Питоне еще больше всего! А для встройки вообще есть LUA...
> Зачем GO? В Питоне еще больше всего! А для встройки вообще есть LUA...То-то гугол с питона на игогоху все переписывает.
Бессмысленная трата времени и денег, потом всё равно на Расте переписывать.
А потом все равно с раста на "новый модный язык для премии нового менеджера"
И только переполнения буфера — нестареющая классика, которая всегда остаётся в тренде!
Ну так и мелкомягкие все с плюсов на шарп переписывали. Ну и где теперь шарп?
И гугл тоже какое-то время все на джаву переписывал. Помню во всех айтишных новостях пару лет мелькало "в джава все гораздо лучше с безопасностью, поэтому андройд будет на джаве". В итоге андройд самая днищенская ос по безопасности (разве что винда ещё хуже) как раз из-за джавы и гугловых апи. Безопасности так и не добавили, а вот тормоза появились. Теперь с растом точно также носятся.
> это 2008 год, а в 2009 появился go, где всеgo gораздо больше и вкуснее,
> для встройки какой мб.На go хрен встроишь сервак в уже существующую программу. Только с ноля писать. Если сишникам хочется что-то похожее на гошные микросервисы - это скорее lwan будет. У этой штуки апи относительно низкоуровневое. Зато и контроль над происходящим хороший.
Го встраивается легчайше и статично. Разве что размеры и тулинг таскать. Ну и безопасность под вопросом.
> Го встраивается легчайше и статично.В сишную программу то? Добавив мегов так 10 к ней? А мне точно надо HTTP серв такой ценой?
> Разве что размеры и тулинг таскать. Ну и безопасность под вопросом.
Зависимость от гугли - ну такое себе. ЯП который делает 1 фирма это суперсыкотно. Вон там дотнетчики в соседней новости уже узнают почему. Их менеджмент майкрософт в легаси записал по второму разу :D. И в этот раз, кажется, всерьез.
Гошный бинарь можно сделать 5 килобайт. Но тогда будет куча зависимостей и теряется прелесть го. Чего положили в сам гошный сервак только гугл знает.
Если эту прогу выполнять на сервере в контейнере/чруте (как делают те, кому не пофиг не безопасность), становится очевидным, что в одном случае, помимо бинаря на 5 кБ, нужно еще 20 Мб библиотек (и пое*ться с их установкой), а во втором — закинуть один статический бинарь 20 Мб.
> Если эту прогу выполнять на сервере в контейнере/чруте (как делают те, кому
> не пофиг не безопасность), становится очевидным, что в одном случае, помимо
> бинаря на 5 кБ, нужно еще 20 Мб библиотек (и пое*ться
> с их установкой), а во втором — закинуть один статический бинарь 20 Мб.А можно использовать продвинутые технологии - и тогда эта система будет +1 референсом на систему "хоста" с 1 стороны, но выглядеть как отдельная для софта - с другой. Ваши знания протухли и нерелевантны.
А если у вас оперативка и место на хостах бесплатные - можете хоть 100 мегов таскать. За свой счет, конечно.
Я тож могу на C написать прогу из одной процессорной инструкции, будет меньще 5Кб, только ничего делать не будет
> Я тож могу на C написать прогу из одной процессорной инструкции, будет
> меньще 5Кб, только ничего делать не будетА ты лучше в 32 кило полноценный HTTP сервак без откровенных вулнов уложи, тогда и поговорим.
ТЫ не туда воюешь, я наоборот одобряю libmicrohttpd
Там был толстый намёк на "откровенные вулны" (а любой сишный код из них состоит).
> Там был толстый намёк на "откровенные вулны" (а любой сишный код из
> них состоит).И где такие уж прямо вулны пачками в сабже или lwan например? А так CVEхи даже в коде на хрусте бывают, база CVE не даст соврать.
> Гошный бинарь можно сделать 5 килобайт. Но тогда будет куча зависимостей и
> теряется прелесть го. Чего положили в сам гошный сервак только гугл знает.Врядли таким манером на игого получится встроенный хттп серв с всего +32 кил к бинарю VS версия которая без http сервака.
+10 Мб на gnutls (в эру HTTPS живём)
> +10 Мб на gnutls (в эру HTTPS живём)Нафиг не нужно например для вебморды по типу роутера в локалке (как вы вообще серт на 192.168.0.1 по нормальному представляете?). Но даже если так посмотреть, ее распакованый пакет 3.5 мега всего. С документацией и локалями (которые можно и не ставить).
А как дополнительный плюс это все не зависит от прихоти 1 корпорации, любящей списывать проекты в утиль по рандому.
Это проект GNU, требуется одобрение (или неодобрение) Go сначала.
Неодобряем.
>различные методы мультиплексирования соединений (select, poll, epoll)kqueue поддерживается?
Вот тоже интересно, написано что среди поддерживаемых платформ: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris. Но при этом современное мультиплексирование только epoll для линукса,остальным видимо довольствоваться посиксным poll'ом. Ну ок, в NetBSD есть wrapper для epoll, к-й транслируется в kqueue. Но все равно...
> Вот тоже интересно, написано что среди поддерживаемых платформ: GNU/Linux,
> FreeBSD, OpenBSD, NetBSD, Solaris. Но при этом современное мультиплексирование
> только epoll для линукса,остальным видимо довольствоваться посиксным poll'ом.Это вообще не либа для super-high-load серверов. Хоть она и не позорная, но немного не для этого.
> Ну ок, в NetBSD есть wrapper для epoll, к-й транслируется в kqueue. Но все равно...
Типа, вам для ваших бздей должны писать код те кто бзды даже и не юзает? А вы точно этого хотите то? Там такой код будет, что как говорится бойтесь своих желаний...
Так если не видел зачем написал и выкатил в прод как сабж?
> Так если не видел зачем написал и выкатил в прод как сабж?Так они posix совместимые же, не? Хотя можете написать им баг чтобы убрали упоминание поддержки конечно :))
Это была подводка если выкатил то знает что делает и пусть другие не возмущаются.
В libmicrohttpd есть найтивная поддержка как NetBSD, так и OpenBSD. Не говоря о FreeBSD.
И все они отличаются, это не просто "Posix" совместимое. Когда дело доходит до сокетов, то у каждой системы есть свои особенности. В libmicrohttpd они учтены и индивидуальны для этих *BSD.
Кстати, библиотека неплохо справляется с высокими нагрузками. 100к запросов в секунду отрабатываются без проблем.
По сути kqueue - единственная недостающая фитча, так как для средних нагрузок вполне poll справляется.
Кстати, на FreeBSD и poll даёт отличные результаты. Производительность системы очень вряд ли будет упираться именно в это.
> Код распространяется под лицензией LGPL 2.1+.спасибо, нет
>> Код распространяется под лицензией LGPL 2.1+.
>спасибо, нетПолучается, если я заюзаю либу в своей проге, я обязан открыть исходники?
Если ты её "исправлять" (малишес форк без переименования) не будешь, то нет.
Немного не так.
Можно линковать хоть динамически, хоть статически. Если статически, то нужно предоставить объектные файлы своей программы. А вот включить исходный код библиотеки в исходный код своей программы (т.е. компилировать как единое целое) не получится из-за несовместимости лицензий.
Вопрос был про обязанность открывать исходники при использовании. По-моему, лицензия даже позволяет скопировать в свой проприетарный код, если передаваться потребителю не будет (или это только gpl?). Т.е. вполне можно сколько угодно использовать на своих серверах, эта лицензия на такая ограничивающая, как agpl.
А я про открытие кода и ответил. Если линковать, то открывать код не нужно даже если линковать статически.
Стоит ещё добавить, что лицензию на собственный форк "с модификациями" так просто поменять нельзя (если это не предусмотрено оригинальными авторами). Обязательства предоставить код подобного форка потребителю возникают при передаче продукта.
Если потребителю передаваться не будет, то и открывать не надо. Открытие кода в gpl/lgpl как раз касается передачи. Перед бинарь - передай и код (gpl). Или передал статический бинарь - передай и код (lgpl). Кстати, этим пользуются всякие серверные решения: они то бинари не передают, а просто предоставляют протокол. Поэтому частенько используют и тот же gpl, даже без открытия кода
Если линкуешься динамически, то нет.
Всё правильно. А если ты в своей проге используешь купленную тобой в коммерческих целях проприетарную либу, а вместе с ней GPL-либу, то при продаже ты должен открыть код, как своей программы, так и коммерческой либы. GPL -- это зомби-лицензия.
Если линкуешься динамически, или линкуешься статически без изменений - по сути нет, этот код уже открыт и доступен от авторов. Вот если изменил - обязан открыть изменённый код либы, если продукт с ней передаётся конечному пользователю.
Если набрать в GPL русской раскладке - получится ПЗД, то есть нельзя тащить в коммерческий продукт.MIT превращается в ЬШЕ, значит норм, только не забывайте указывать авторов использованного кода.
AGPL, соответственно, ФПЗД, то есть совсем нельзя! А вот LGPL будет ДПЗД, то есть в принципе норм, ничего страшного.
> Если набрать в GPL русской раскладке - получится ПЗД, то есть нельзя
> тащить в коммерческий продукт.Ну все, туши фонарь, сливай вода, шатдауни серваки, ибо нех! Или у вас все серваки исключительно в альтруистичных целях работают?!
> AGPL, соответственно, ФПЗД,
Тот редкий случай когда транслит не врет. Ну вот неудобная лицензия, соотвествовать ей - гимор. И с другими GPLями не совместима.
ЬШЕ — это ПЛН ПЗД, то есть гораздо хуже.
Не говоря уже об ИЫВ (BSD).
ЬШЕ — это не ПЗД ! :D
Это ПЛН ПЗД!!1
Я поначалу прочитал как ЫШЕ, т.е. ещё, а значит норм.
>>нельзя тащить в коммерческий продукт.Смотря в какой продукт, и в какую его часть.
Если ПО не вешь сама в себе, то значительная часть кода бывает и открыта, и там GPL не доставляет проблем.Другой вопрос, что подобные мини реализации представляют интерес скорее для микроконтроллеров. А там динамическими линковками или никак, или непродуктивно.
Да и задача не настолько сложная, что б неумудриться наделать "велосипедов", но своих.
А LGPL - ДПЗД - то есть пофиг.
Прянику зачёд за расшифровку абревиаутур. Предложи это как официальный перевод названий лицензий для Фонда отечественного ПО :)
Жаль, что баш.орг.ру окочурился.
> спасибо, нетТы правда думаешь, что кому-то это интересно :-)))?
Думаю, нет.
Но всё равно спасибо!
Wt то же делает.
Vibe.d на D тоже норм. Приятный синтаксис делает работу с ним ненапряжной. Но отдаю должное минимализму сабжа - 32 КБ! Не каждый статически компилируемый язык может похвастатся такими компактными бинарями даже при небольшой кодовой базе.
> Приятный синтаксис делает работу с ним ненапряжной.Для приятного синтаксиса на сях - например, lwan есть, там можно на сях почти как на игого фигачить. Минимальный серв - полстранички текста, и это на сях то. Правильные апи - ключ к успеху. Но в сабже низкоуровневый контроль над действом хорош.
Есть такое, хорошая вещь. Код хороший, понятный, goto для компактных выходов из функций одобряю. Есть fuzz тестирование, был проведен аудит, который ничего серьезного не показал. Всего 25 тыс. строк на C плюс по мелочи.cloc lwan
318 text files.
184 unique files.
149 files ignored.github.com/AlDanial/cloc v 1.98
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 70 5446 2581 24114
C/C++ Header 64 843 2406 2732
> Есть такое, хорошая вещь. Код хороший, понятный, goto для компактных выходов из
> функций одобряю.У него апи хэндлеров достаточно простое и удобное. Можно быренько мелкий "апп" сервер на манер микросервиса скроить (привет игогошики) - или вебморду несложную. Даже вебсокеты могет. И примеры как его юзать прям в комплекте. С корутинами еще довольно прикольно придумано.
Автор вроде не раздолбай и security-aware более-менее, поэтому при всем его premature optimization - таких уж откровенных вулнов оптом не сажает. И над ошибками работает.
Как приятный бонус - таки повернут на перфомансе, на счету этой штуки призовые места в ряде бенчей. При том довольно апликушных, типа работы с скулайтовой базой, что забавно.
> Есть fuzz тестирование, был проведен аудит, который ничего серьезного
> не показал. Всего 25 тыс. строк на C плюс по мелочи.Ну вот да - за всю его историю лажи в нем достаточно немного для HTTP сервера. Правда кода все же больше чем 32 кило. И апи не такое низкоуровневое как у сабжа в общем случае.
Посмотрел код - убер планарная Сишка. Поддерживать такое - врагу не пожелаешь.
Хейтерс гонна хейт, а эта библиотека популярна и используется в множестве проектов, для всяких веб-морд в частности.
Надеюсь, не один из этих проектов не используется в проде (потому что последние 10 лет эта библиотека официально находилась в статусе сырого продукта, не готового для промышленного использования).
systemd ее юзает
> Надеюсь, не один из этих проектов не используется в продеДофейхоа где используется, кукуй.
> библиотека официально находилась в статусе сырого продукта, не готового
> для промышленного использования).Когда и кого это останавливало? Ей например некторые майнеры для биткоина пользовались - рисовали встроенный вебфейс. А чтоб видиеть чем ферма занимается.
Или например motion - так то это прога для отлова движения на камере (== охранная система) но до кучи у нее - вот - и веб интерфейс можно заенаблить. А там - сабж.
Или системд допустим местами юзает это - для ремотного доступа. Или - collectd, для - ессно - показа графиков статистики которую нагреб. Kodi морду им рисует. Да и еще ряд софта, см реверс-депы своего дистра.
То что некий софт не делает релизы - не значит что им нельзя пользоваться. Можно самому прогнать валидацию под свои кейсы если надо. А у этой штуки серьезных конкурентов не так уж и много, чтоб пальцы гнуть.
> Надеюсь, не один из этих проектов не используется в проде (потому что
> последние 10 лет эта библиотека официально находилась в статусе сырого продукта,
> не готового для промышленного использования).Можно вспомнить OpenSSL, который был с версиями меньше единички больше десятка лет, что совершенно не мешало на нём построить почти всё, что требовало SSL, а потом и TLS.
А на С++ есть?
Конечно есть, с кучей шаблонов и виртуальных методов, и еще dynamic_cast<> через каждую строку
Ссылку, брат Аноним.
Например, вот эта https://github.com/yhirose/cpp-httplib/
Если тебе нужен _самый прлизводительный_ то вот https://github.com/drogonframework/drogon но это не просто микро http сервер.
Попроси GPT перевести. И лучше сразу на разные языки.
Теперь понял, как на Ржавый переписывают.
Не совсем так, там у них какой-то транспайлер полусырой есть. Практика показывает что при генерации кода на Расте GPT (а другие сетки и подавно) склонны генерить бойлерплейт и сажают в него кучу багов, юзают unsafe где не нужно. С Питоном например все намного лучше, и даже с Си и Го.
На D пробовали что-либо транспейлнуть? В самой экосистеме D есть транспиляторы с C. Пробвовал как-то заголовочник от ядра преобразовать в D-модуль им, как-то не очень получилось.
Нет, но вроде такая транспиляция не особо нужна потому что фишка D в очень легкой работе с уже существующим кодом на C.ImportC is a C compiler embedded into the D implementation. It enables direct importation of C files, without needing to manually prepare a D file corresponding to the declarations in the C file. It directly compiles C files into modules that can be linked in with D code to form an executable. It can be used as a C compiler to compile and link 100% C programs.
Не благодари (знаю, что не будешь) - https://github.com/userver-framework/
Помню лет 7 назад пытался ее заюзать в мини проекте. Даже на смешных нагрузках вела себя неадекватно и глючила. Впрочем, для гну неудивительно.
Конечно, не удивительно для GNU.
Как у ужасно глючащий GCC, которым собрано половина всех бинарников в мире, если не больше.
Вообще проектик GNU так себе, непонятно о чём и для кого.
:)
> Помню лет 7 назад пытался ее заюзать в мини проекте. Даже на
> смешных нагрузках вела себя неадекватно и глючила. Впрочем, для гну неудивительно.Булшит, оно тянет даже нагрузки выше среднего вполне адекватно. А если глючит, может, дело не в бобине?
Осталось теперь дыры и баги еще 16 лет вылавливать)