Представлен релиз стандартной Си-библиотеки Musl 1.2.3, предоставляющей реализацию libc, которая подходит для применения как на стационарных ПК и серверах, так и на мобильных системах, сочетая полноценную поддержку стандартов (как в Glibc) с небольшим размером, низким потреблением ресурсов и высокой производительностью (как в uClibc, dietlibc и Android Bionic). Имеется поддержка всех обязательных интерфейсов C99 и POSIX 2008, а также частично C11 и набор расширений для многопоточного программирования (POSIX threads), управления памятью и работы с локалями. Код Musl поставляется под свободной лицензией MIT...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=56987
Нужно!
Но только для уязвимостей класса arbitrary code execition в printf.
в си даже уязвимости быстрые
Мы так быстро воспользовались уязвимостью, что вы даже не заметили!
>Код Musl поставляется под свободной лицензией MIT.И в этом кроется фатальная ошибка. Надо перелицензировать на копилефт.
зачем? пермиссив - это одно из преимуществ перед жолибцой.
Поэтому там комитит узкая группа лиц, получая толпу корпоративных паразитов на хребет. Корпам так то удобнее, конечно...
Изучал и то и то!
Качество кода и там и там полный трешак. Я бы даже сказал, что это пособие по тому как не надо писать код!!!
Изучая этот код, я понял что значит Сишность головного мозга:)
Пруф или не было. Что конкретно не понравилось?
ИМХО, там качество кода на уровне https://www.ioccc.org/ :)
Кстати, нашел свои ребусы. Вдохновение черпал в те времена когда изучал musl:))
char *strncpy(char *dest, const char *s, size_t n) {
char *d = dest;
while (n && (--n, (*d++ = *s++)));
while (n--) *d++ = 0;
return dest;
}
char *strncat(char *dest, const char *s, size_t n) {
char *d = dest;
while (*d) ++d;
while (n-- ? (*d++ = *s++) : (*d = 0));
return dest;
}
ППС: Никогда так не пишите!!!:)
> Никогда так не пишитепочему ? как надо было ?
Ну типа цикл в одну строчку, сложное условие и без тела. Плохо читается питонистами, а мозг баш-программистов POCA LINUX вообще скажет "Пока Линукс". На деле подобный код писали десяток-другой лет назад, что бы помочь транслятору.
// возвращает не по стандарту
char* strncpy(char* dst, const char* src, size_t n)
{
assert(dst || n == 0);
assert(src || n == 0);
while (n && (*dst++ = *src++) != 0)
n--;
if(n)
*dst++ = 0;
return dst;
}
>>> почему ? <<<Код должен быть понятным (принцип KISS)
>>> как надо было ? <<<Я бы использовал memccpy (принцип DRY):
char *strncpy(char *to, const char *from, size_t count) {
char *stop = memccpy(to, from, '\0', count);
if (stop != NULL)
memset(stop, '\0', count - (stop - to));
return to;
}
char *strncat(char *to, const char *from, size_t count) {
size_t len = strlen(to);
char *stop = memccpy(to + len, from, '\0', count);
if (stop == NULL)
to[len + count] = '\0';
return to;
}
Кроме того это будет работать быстро, разумеется при условии что вы оптимизируете strlen, memset и memccpy, а чаще всего это именно так!
Если бы мсье был не теоретиком, то оказалось бы, что у транслятора может быть своё представление об упомянутых функциях, и порой лучше выполнить man gcc|grep -C2 memcpy, прежде чем что-то писать на публику. Двойное strlen вообще комментировать смысла нет.
Очередной эксперт подъехал!) Ваши советы для меня бесценны, - я просто заново открыл, для себя мир разработки;)) вот это поворот!- пойду дальше читать теорию трансляторов;), - но вы держите меня в курсе событий;)
А, Вы уже написали свою реализацию стандартной библиотеки, как это сделал я? Ссылочкой не порадуете?
Одно дело детально изучить технологию (так как надо по работе), и совсем другое переписывать кучу говнокода! Надо быть полным дебилом чтобы заниматься чем-то подобным за бесплатно!!!
>>> как это сделал я <<<Rustоманы вам будут рады, - там любят всё переписывать!:)
> Одно дело детально изучить технологиюНет ничего плохого в бытие теоретиком, почему Вы расстраиваетесь? Изучили детально, сможете когда-нибудь применить знания на практике. Главное, поменьше трындите на темы, которыми не занимались и не понимаете. ;)
> и совсем другое переписывать кучу говнокода!
Вы о наболевшем? С этим не ко мне, а к платному психологу.
>>>> как это сделал я <<<
> Rustоманы вам будут рады, - там любят всё переписывать!:)Конечно будут, растоманы ведь пока не осилили ядро. Но я пока не осилил Раст. ;)
Забавно слышать такое от человека который советует другим, читать книженцию почти 30-летней давности:))) На такое способен только эксперт с большой буквы:) Ну да ладно, продолжайте и дальше жить в середине 80-x:)))
ПС: Хотя автору musl не мешало бы прочитать Главу 1, пункты 7 и 7.1 из этой вашей экспертой книги:)
30 лет назад, это классика. Тогда люди сначала сами делали, а только потом других учили. Ныне каждый Аноним может написать musl. Если в процессе его не разбудит мама словами "пора в школу".
какой тут ужас...
м.. очередной опеннетный эксперт, который скорее всего профессионально не написал и строчки Си кода и никогда не работал в команде, - иначе там бы вам объяснили, что автор musl пишет лютый говнокод! с таким говнокодом вас не возьмут не в одну команду разработки!
Просто откройте для себя классическую книжку "Верёвка достаточной длины, что бы выстрелить себе в ногу" за авторством Ален И. Голуб. И всё сразу станет понятно, кто и что на самом деле писал. Цитирую:К тому же, многие программисты избегают условной операции (?:) просто потому, что она им кажется непонятной. Тем не менее, это условное выражение может существенно упростить ваш код и, следственно, сделать его лучше читаемым. Я думаю, что:
printf("%s", str ? str : "<пусто>");
гораздо элегантнее, чем:
if ( str == NULL )
printf( "<пусто>" );
else
printf( "%s", str );...
Таблица 2. Как ничего не делать в С.
if ( p != NULL )
if ( p == NULL )
Вот это поворот! - можете за меня ещё помолится на книжку K&R:)
Код должен быть понятным в прикладном ПО. В системном нужна оптимизация и скорость работы. Поэтому страдающие паскалем головного мозга к подобным работам не допускаются.
Опа, эксперты с Сишностью головного мозга повылазили:)) Этот код, довольно быстрый,и для этого не пришлось писать лютый говногод, как это сделал автор musl, так что о какой производительности идет речь? - вы походу, и строчки Си кода не написали в своей жизни:)
>>>> почему ? <<<
> Код должен быть понятным (принцип KISS)Видите ли вьюнош, код должен быть понятным не только лишь всем.
>>>>> почему ? <<<
>> Код должен быть понятным (принцип KISS)
> Видите ли вьюнош, код должен быть понятным не только лишь всем.Какая глубокая мысль! 🤦
Keep it simple, stupid
Скорее речь о простом коде
Нормальный, профессиональный код. Работает идеально, не требует никаких исправлений, патчей и т.п. поэтому людям его незачем читать. Что-то похожее я видел в книге "С для чайников"
>>> поэтому людям его незачем читать <<<А потом когда вдруг понадобится что-то сделать, внезапно придется искать программиста, который знает язык COBOL:)))
Ну вы, конечно, и сравнили английский с древне-тюркским
Скорее просто вы не поняли при чём тут COBOL:) ну да ладно, видимо моя шутка не удалась:)
Сути это не меняет: надо писать простой и самое главное понятный код, который будет легко читать, а значит и сопровождать в дальнейшем, - если это не так, значит вы написали говнокод!
Петросянство не прокатило, да. Религиозные проповеди насчёт понятности и читаемости тоже не прокатят. Системное ПО не предусматривает написания кода, который был бы понятен даже идиоту. Для разработки системной библиотеки вовсе не требуется стопицот кодеров, сотни тимлидов, десятки менеджеров и несколько руководителей. А те высококлассные узкие специалисты, способные тянуть такую разработку, вполне могут подобные коды читать и понимать, и сами должны уметь писать точно также, с минимумом строк.
Продолжайте и дальше в это верить:)
Так мог написать только человек, который никогда не работал программистом и тем боле в команде:)))
ПС: Продолжайте и дальше восхвалять говнокод типа musl:) Ах, да, можете ещё перед сном помолится на книжку K&R, после которой люди как раз и пишут говнокод, никогда не обрабатывают даже элементарные ошибки, и уж тем более не знают что такое тестирование!
> Петросянство не прокатило, да. Религиозные проповеди насчёт понятности и читаемости тоже
> не прокатят. Системное ПО не предусматривает написания кода, который был бы
> понятен даже идиоту. Для разработки системной библиотеки вовсе не требуется стопицот
> кодеров, сотни тимлидов, десятки менеджеров и несколько руководителей. А те высококлассные
> узкие специалисты, способные тянуть такую разработку, вполне могут подобные коды читать
> и понимать, и сами должны уметь писать точно также, с минимумом
> строк.Что ты несёшь! 🤦
Вот меня удивляет, в чем проблема освоить КОБОЛ? почему это стало проблемой то?
нытье о "поиске погромиста" обусловлено закидонами работодателя.
>> что-то сделатьВ нём не надо ничего делать. В нём уже сделано всё, что надо.
> Качество кода и там и там полный трешак.Да не скажи, в Musl местами довольно неплохой код попадается.
>> и высокой производительностьюВысокая производительность у него только во всяких хеллоуворлдах. Мало-мальски серьёзные приложения в нём сильно тормозят.
>> Высокая производительность у него только во всяких хеллоуворлдах.а также у правильно написанных приложениях (не требующих 3 выделений памяти на склеивание двух строк)
>> Мало-мальски серьёзные приложения в нём сильно тормозят.
python тормозит адски - подтверждаю
Если бы питон быстро бегал - это была бы ж...а, сожрал бы все живое!
Было бы неплохо взглянуть на соответствующий тест производительности. Наверное вы сделали свой вывод опираясь на какое-то исследование - поделитесь пожалуйста?
например
https://paste.sr.ht/%7Eminus/18b44cfe58789bc1fb69494130...
https://habr.com/ru/post/520920/
см. комментарии
Этот твой пост по ссылкам достаточно хорошо объясняет, почему glibc нестандартизированная параша, которая не должна иметь права быть *стандартной* библиотекой.
А я уже думал, что эта весна настолько уже хороша, что лучше уже и некуда, но нет! Ждём musl 1.3!
Ctrl+F "Void Linux" ничего не показал, а тем временем, это лучший rolling-release дистрибутив на сегодняшний день, в том числе и в варианте c musl вместо glibc.
Он лучший для умеющих собирать из исходников, яинить баги. Вот вышло 5.17, 5.17.1, а в XBPS их нет. Тем временем автоподбор параметров ядра легко может не включить скажем протоколы для работы сенсорной панели ноутбука. То есть слабонервным новичкам там делать особо нечего. Но на musl вариант и правда хорош. Там некуда торопиться, ибо автоисправлений ошибок нет как в glibc. OpenWRT по умолчанию тоже на musl. И вот вторая библиотека для весьма тощих устройств. Впрочем в Void есть s6 как дополнительная система инициализации. И да, нытики будут ныть, что разработчики не включили автоматически какие-нибудь сервисы сразу же. У одноклеточных выбор из одного доступного варианта позволяет не использовать мозг, ведь они свято верят, что мозгами пользоваться - моветон.
Людям за компьютером работать надо, а не собирать исходники и чинить баги.
Сбор софта и починка багов тоже работа за компьютерами так то. А еще булки на деревьях не растут.
В следующий раз попытайтесь логически связывать слова и предложения, набор букв какой-то
Жесть, брателло, тебе бы отдыхать побольше без компьютера. Даже через буквы видно, что у тебя глаз дёргается.
> Тем временем автоподбор параметров ядра легко может не включить скажем протоколы для работы
> сенсорной панели ноутбука.Лучше позвольте роботу баланс креды тратить. Так интриги больше.
> То есть слабонервным новичкам там делать особо нечего.
А им вообще туда зачем? Демонстрировать что получается у обезьяны с гранатой?
как дистр без пакетов может быть лучше арча, который с пакетами?
Ты, похоже, не в курсе, что XBPS означает X ***Binary Package*** System.
>x86_64это что за архитектура такая?
Ведь была же фирма AMD, создала не с нуля архитектуру amd64 - так я до сих пор пользуюсь, а фирма intel-aviv на то время сосала четвёртый пень длинным конвеером и не создавала полезных архитектур...
> intel-avivСпасибо, посмеялся %)
Что-то опоздали вы со смехом, уволили их всех уже.