Проектом blink развивается новый эмулятор процессоров x86-64, позволяющий запускать статически собранные Linux-приложения в виртуальной машине с эмулируемым процессором. Основным назначением проекта является предоставление возможности запуска собранных для архитектуры x86-64 Linux-программ в других операционных системах (macOS, FreeBSD, NetBSD, OpenBSD) и на оборудовании с другой аппаратной архитектурой (x86, ARM, RISC-V, MIPS, PowerPC, s390x). Код проекта написан на языке Си (ANSI C11) и распространяется под лицензией ISC. Из зависимостей требуется только libc (POSIX.1-2017)...Подробнее: https://www.opennet.me/opennews/art.shtml?num=58434
Нужно больше слоёв прослоек и виртуализации.
Зачем нам нужен maximum performance в родных, оптимизированных бинариях? Мы луДше засунем туда все, смешаем и взболтаем com, pe и elf, а потом начнем выполнять на виртуалке. А еще луДше - в виртуалке внутри виртуалки, чтобы мы могли отлаживать виртуалку внутри виртуалки. Java уже стописят лет как сделала? Даже редмондсофт семьсятпять лет как сделала IL? Мы пойдем своим путём - у них у всех есть ФАТАЛЬНЫЙ НЕДОСТАТОК!
> в родных, оптимизированных бинариях?Которые ты для всех напишешь, да?
Компилятор слинкует, родненький. Или ты того, самого, не в курсе процесса сборки программ?
А для проприентари есть ультиматимативное средство - "Я за что вам деньги плачу, разрывай договор, мои юристы с вас еще неустойку с ущербом спишут".
Я уже представляю, как я пишу это в давно закрытую компанию, выпустившую пару классных игрушек в начале 2000х, и требую от них порта на RISC-V.
Игрушка явно настолько классная - широко известная в очень-очень узеньких кругах - что для нее не появилось ни Open* движков, ни ремастера с Гога, ни даже официально вскрытых исходников?
например эта Supreme Commander: Forged Alliance
Или Unreal(1998).
RTS-ники - кликеры everywhere
Хороша стратежка. Особенно вариант FAF
> ремастера с ГогаНе знал, что они добавляют процессорные архитектуры в порты.
Кстати, добавляют. По крайней мере, на x86_64.Если посмотришь, там есть ремастеры кучи классический РПГ типа Baldur's Gate 1/2, Icewind Dale 1 и так далее. А вот ремастера Icewind Dale 2 нет, как раз потому что Black Isle просpали исходники.
>А вот ремастера Icewind Dale 2 нетЕсть мод фанатский на ремастер BG. Но он вроде как пока в закрытой бете и только под винду:
https://forums.beamdog.com/discussion/79872/icewind-dale-2-e...
Ага. Прикинь, и такое бывает! А от некоторых игрушек, бывает, исходники вообще просраны.
> исходники вообще просраны3DO с героями меча и магии, ты ли это
До сих пор неясно, как юбисофт умудрился купить шматок некомпилируемого продукта даже без доков по лору
Пути три:
а) в стим, к Габену, и требуешь, чтобы за твои 249.99 по скидке он дал возможность тебе играть на риске.
б) идёшь к Vovan34-namber-van на рутрекере и слезно умоляешь в комментариях сделать сборку под твой риск.
в) ставишь нормальное РОДНОЕ окружение для игры (накладные расходы при прямых руках будут минимальны) или, если ниасилил - вино.
Играешь.Эта порнография с универсальными бинарниками в недоВМ в принципе имеет сценарии использования, но их настолько мало, что можно ими пренебречь.
А кроме манямирка решения будут? К габену он пойдёт, ути какой серьёзный.
Интересно, почему так не происходит в реальности?
Тебе не нужно — не мешай другим работать.
Сразу видно человека, который даже хелловорлд толком осилить не смог.Я в прошлом году выкладывал очень простую инструкцию по сборке своей одной программы под множество архитектур. Так вот, все что слегка сложнее хелловорлда сразу под все не соберется. И не сразу не соберется. И с танцами с бубном не соберется. А когда ты уже все нервы себе вытрепешь и таки соберешь, то не запустится (есть и вторая инструкция, по запуску).
Если хочешь нас поразить и усадить в лужу своим "профессионализмом" - возьми какой-нибудь мало-мальски известный проект (но не задроченный уже с болью и потом авторами именно что под мультиплатформу) и собери. Что может быть проще, да?
Точнее - сделай патчи, чтобы он собирался и хотя бы(!) запускался, и покажи.Покажи и мы все точно заткнемся. И поверим, что ты действительно знаешь о чем говоришь (на самом деле не поверим, так как у нас тоже есть опыт - мы этим, понимаешь ли, каждый день занимаемся).
ссылка раз: https://www.opennet.me/tips/3193_build_compile_test_arm_mips...
ссылка два: https://www.opennet.me/tips/3201_helloworld_build_compile_li...
Хы, ты опять гитхабами меряться лезешь.
Все-таки приятно, что даже сам ВЫЛИКЫЙ УРРИ триггернулся.> А когда ты уже все нервы себе вытрепешь и таки соберешь, то не запустится (есть и вторая инструкция, по запуску).
А я обычно изучаю предполагаемую целевую архитектуру. Сначала. Перед сборкой. Чтобы иметь представление, какие функции там есть и какие механизмы как реализованы. После чего все вполне достаточно просто - хотя и не спорю, иные моменты приходится выносить в условную компиляцию, а другие - перерабатывать с учетом того, что такой мегаудобной функции нет, или есть, только возвращает не то и не так.
А вообще здесь стоит задать простой вопрос: "Ты считаешь себя программистом, при этом достаточно не раскуривая целевых платформ при кросс-сборке?"
> то не запустится (есть и вторая инструкция, по запуску).
Эта проблема сохраняется и с этими "универсальными" бинарниками внутри недовиртуалки - программа работает в окружении, а окружение - ВНЕЗАПНО - может быть разным.
> Точнее - сделай патчи, чтобы он собирался и хотя бы(!) запускался, и покажи.
Сколько ты за это заплатишь? Нет, серьёзно. Сумма на кону.
> А я обычно изучаю предполагаемую целевую архитектуру. Сначала. Перед сборкой.Кинь-ка нам ссылку на историю github'а, показывающую, как эта стратегия, приводит к успеху в создании мультиплатформенных приложений. Пока это звучит не как, работающая стратегия, а как необоснованный дилетантский оптимизм.
> Сколько ты за это заплатишь? Нет, серьёзно. Сумма на кону.
Сейчас ты должен ему доплачивать за хороший совет, как ты можешь поднять свою квалификацию. Он, от широкой души видимо, не просит денег. Но это не значит, что он тебе должен доплачивать за то, что ты займёшься самообразованием.
> Сколько ты за это заплатишь? Нет, серьёзно. Сумма на кону.Хы. Получается мультиплатформа это таки сложно? Настолько, что без денежки даже за что-то средненькое браться не комильфо?
О чем я и писал.
> Настолько, что без денежки даже за что-то средненькое браться не комильфо?Не-а, дядя.
Просто меряться цифровыми членами с тобой, выполняя рутинную работу в НЕРАБОЧЕЕ время - особенно в новогодние праздники - нахожу немного неразумным. Семья, быт, отдых, здоровый сон, к родителям съездить, все дела - терять ради тупого спора желания нет. Если у тебя настолько нет жизни - то это, на деле, не мои проблемы, а твоё горе.
Так и запишем - урри не готов компенсировать свои тупые "Я протрахался стописят часов, портируя Х на Y. Слабо тебе так же?"
Ну, понимаешь, а для остальных в результате есть солюшн от урри и фига от тебя. Не знаю на что вы спорили но предлагаю отдать победу Урри.
Хостовую виртуалку нужно написать на javascript.
Я уже как-то тут писал вполне вероятную цепочку из интерпретаторов и виртуальных машин типа: в eBPF запускаем урезанную java, внутри которой выполняется полная java, внутри полной java-машины крутится виртуалка с обычной виндой, в винде, в дотнетовском IL крутится написанная для шарпея обвязка для js-двигла, внутри js'а крутится мини-ОС, в которой выполняется родной HelloWorld.
>писалГде скачать можно?
> Где скачать можно?Где-то в истории комментариев.
>Зачем нам нужен maximum performance в родных, оптимизированных бинариях?эта умнейшая мысль могла прийти только такому гениальному эксперту как вы. Ни один современный "разработчик" до неё бы не догадался.
Вам нужно начать переписывать программы чтобы их можно было скомпилировать в архитектуры ARM, RISC-V, MIPS, PowerPC, s390x. Уверена, такому компетентному разработчику как вы, это будет очень легко. Вы легко посрамите Justine Tunney, сделав бессмысленной её работу.
Вы s390 живьём когда последний раз видели?)))
+ за Ваш стиль!
> По функциональности blink напоминает команду qemu-x86_64, но отличается
> от QEMUтем что умеет запускать только бинарники linoops - причем загадочные "статически собранные приложения" (статической сборки в glibc нет уже двадцать лет).
О прочих "преимуществах" после этого можно было уже и не писать.
(Безусловно, программа которая абсолютно ничего не умеет, будет быстрее и компактнее полноценного эмулятора реальной аппаратуры. Быстро и компактно делая ничего.)Чудо-отладчик, естественно, работает только для x86.
Хорошая поделка для гика, которому нечем заняться в новогодние каникулы, но пользы от нее - никому и никакой.
> статической сборки в glibc нет уже двадцать летДа что ты говоришь, родной... Правда, что ли? Пойду расскажу коллегам по подвалу, а то "мужики-то не знают".
>Да что ты говоришь, родной... Правда, что ли? Пойду расскажу коллегам по подвалу, а то "мужики-то не знают".Расскажи. Заодно расскажи мужикам про dlopen(), который в glibc дёргается на каждый чих.
Это тебе кто такую чушь рассказал, или сам нафантазировал?
намекаешь, что нужно использовать glibc без nss, iconv и чего-то там еще
Здрасьте приехали. Это новое поколение? Тебе сколько лет?
> Здрасьте приехали. Это новое поколение? Тебе сколько лет?Судя по всему с линуксом давненько не работали... чувак правду говорит, под линуксом х86_64 glibc не компилится статически, если там что чуть посложней ХелоВорлд, Я чуть ниже предложил Урри потренироваться на кошках/sqlite3, можете обьеденить усилия и доказать что есть еще порох в штанах
Судя по минусам, убеждаюсь еще раз в "глубоких" знаниях "спецов" опеннета...
>> Здрасьте приехали. Это новое поколение? Тебе сколько лет?
> Судя по всему с линуксом давненько не работали... чувак правду говорит, под
> линуксом х86_64 glibc не компилится статически, если там что чуть посложней
> ХелоВорлд, Я чуть ниже предложил Урри потренироваться на кошках/sqlite3, можете
> обьеденить усилия и доказать что есть еще порох в штанахНу что же, вызов принят.
http://www.tinyware.ru/garbage/sqlite3-3.34.1.tar.gzСобрано на Debian bullseye 64. Собрано почти по рецепту, полностью не разбирался, пакет отлаживать лень. Не собрано csv.so ну и понятно это .so.
> http://www.tinyware.ru/garbage/sqlite3-3.34.1.tar.gz
> Собрано на Debian bullseye 64. Собрано почти по рецепту, полностью не разбирался,
> пакет отлаживать лень. Не собрано csv.so ну и понятно это .so.Сорри, но это обрубыш, которым пользоваться будет трудно (без readline, ncurses ), я чуть ниже предложил опции для компиляции, более сложный пример (и наверное боллее подходящий в контексте дискуссии) - статический php-cli с маст хэв extensions
Там в папке рядом деб пакеты и rules как я собирал. Tar gz это фигня.
> Там в папке рядом деб пакеты и rules как я собирал. Tar
> gz это фигня.Вот простой исходник:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>int main(int argc, char const *argv[]) {
struct addrinfo hints;
struct addrinfo *res, *tmp;
char host[256];memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;if (argc != 2) {
fprintf(stderr, "%s string\n", argv[0]);
exit(EXIT_FAILURE);
}int ret = getaddrinfo(argv[1], NULL, &hints, &res);
if (ret != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret));
exit(EXIT_FAILURE);
}for (tmp = res; tmp != NULL; tmp = tmp->ai_next) {
getnameinfo(tmp->ai_addr, tmp->ai_addrlen, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
puts(host);
}freeaddrinfo(res);
exit(EXIT_SUCCESS);
}
Компилим:
gcc -Wall -static -static-libgcc -o getaddrinfo getaddrinfo.cЧитаем:
getaddrinfo.c:(.text+0x8c): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
делаем
ldd getaddrinfo
not a dynamic executableкотoрый вроде успокаивает, но теперь переносим бинарник на Alpine Linux и обламываемся потому как все написанно в предупреждении. В более сложных случаях, даже на системах с glibc но с более старой версией будет такой же облом потому как это фейк статика
Хм.```
$ cat helloworld.c
#include <stdio.h>int main()
{
printf("Hello, World!\n");
return 42;
}$ gcc helloworld.c -static -static-libgcc
$ ls
a.out helloworld.c$ readelf -d a.out
There is no dynamic section in this file.$ ./a.out
Hello, World!
```
А теперь, чуть посложней пожалуйста - sqlite3 для х86_64 под линь, плыз
> А теперь, чуть посложней пожалуйста - sqlite3 для х86_64 под линь,
> плызПисос ты бездарь... Самому сложно было трайнуть? Даже гуглить не надо, все выше написано.
Да без проблем. Минута времени:$ uname -a
Linux PC 5.13.0-39-generic #44~20.04.1-Ubuntu SMP Thu Mar 24 16:43:35 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux$ wget https://www.sqlite.org/2022/sqlite-amalgamation-3400100.zip
$ unzip ./sqlite-amalgamation-3400100.zip
$ cd sqlite-amalgamation-3400100$ gcc -DSQLITE_OMIT_LOAD_EXTENSION ./sqlite3.c ./shell.c -pthread -static -static-libgcc
$ readelf -d a.out
There is no dynamic section in this file.$ ./a.out
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table noob (id integer primary key);
sqlite> insert into noob (id) values (NULL) returning id;
1
sqlite> .exit--
А теперь просим выступить на бис с заявлением "извините, коллеги, облажался. написал фигню, но вы мне убедительно показали что был не прав.".
> $ gcc -DSQLITE_OMIT_LOAD_EXTENSION ./sqlite3.c ./shell.c -pthread -static -static-libgccТак и знал что Урри найдет amalgamation и таки покажет лабуху мастеркласс. Зачетно.
>> $ gcc -DSQLITE_OMIT_LOAD_EXTENSION ./sqlite3.c ./shell.c -pthread -static -static-libgcc
> Так и знал что Урри найдет amalgamation и таки покажет лабуху мастеркласс.
> Зачетно.Подшакалил ? Зачетно ! Лизни еще, а потом попробуй компильнуть ПЫХ или питон статически, не голяк, а экстеншенами с readline, json, xml...
Откуда бLять у вас здесь столько желчи у всех?! В этом здесь большинство первоклассные спецы... "так держать !"
> gcc -DSQLITE_OMIT_LOAD_EXTENSION ./sqlite3.c ./shell.c -pthread -static -static-libgcc/usr/bin/ld: /tmp/ccdxr656.o: in function `find_home_dir':
shell.c:(.text+0x283f2): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
о, ну хоть один попался если не грамотный то умеющих хотя бы прочитать выхлоп компилятора.А сколько еще тебя ждет открытий чудных, если ты ЭТО еще и запускать вздумаешь...
> о, ну хоть один попался если не грамотный то умеющих хотя бы прочитать выхлоп компилятора.Да куда нам грешым до "вашего величества" :)
> А сколько еще тебя ждет открытий чудных, если ты ЭТО еще и запускать вздумаешь...
Это не ко мне, это к народу свято верующим в чудо что glibc можно компилить статически
> Это не ко мне, это к народу свято верующим в чудо что
> glibc можно компилить статическиНа самом деле они правильное веруют - компилить - можно ;-) Только потом ничего кроме хеловротов не работает.
Я уж не знаю что такое надо придумать, чтоб не зацепить хотя бы nsswitch, а это в современных версиях еще далеко не все.
> А теперь просим выступить на бис с заявлением "извините, коллеги, облажался. написал
> фигню, но вы мне убедительно показали что был не прав.".У меня проблем нет быть признательным и признавать свои ошибки, буду только рад если кто-то поправит, но только не на примерах ХелоВорлд. На сегодняшний день полагаться на то, что можно сложный проект слинковать с glibc без сюрпризов - не реально. Попробуйте собрать статически пых с расширениями(!), потом поговорим
> Писос ты бездарь... Самому сложно было трайнуть? Даже гуглить не надо, все
> выше написано.
> Да без проблем. Минута времени:Ну давай, "не" писос, попробуй:
https://www.opennet.me/openforum/vsluhforumID3/129432.html#256
> А теперь просим выступить на бис с заявлением "извините, коллеги, облажался. написал
> фигню, но вы мне убедительно показали что был не прав.".^^^
> А теперь, чуть посложней пожалуйстаhttps://github.com/pavlinux/ctorrents-plx
...
LIBS :=-L. -static-libstdc++ -static-libgcc -Wl,-Bstatic -lssl -Wl,-Bstatic -lcrypto
> https://github.com/pavlinux/ctorrents-plxХренакс, у каркуши даже что-то дельное в репах было.
>> А теперь, чуть посложней пожалуйста
> https://github.com/pavlinux/ctorrents-plx
> ...
> LIBS :=-L. -static-libstdc++ -static-libgcc -Wl,-Bstatic -lssl -Wl,-Bstatic -lcryptoldd ctorrent
linux-vdso.so.1 (0x00007ffc64275000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc1cff00000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc1cfd7d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc1cfbbd000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc1cff9f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc1cfb9c000)Это - НЕ СТАТИКА
Должно быть: not a dynamic executable
>[оверквотинг удален]
>> LIBS :=-L. -static-libstdc++ -static-libgcc -Wl,-Bstatic -lssl -Wl,-Bstatic -lcrypto
> ldd ctorrent
> linux-vdso.so.1 (0x00007ffc64275000)
> librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc1cff00000)
> libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc1cfd7d000)
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc1cfbbd000)
> /lib64/ld-linux-x86-64.so.2 (0x00007fc1cff9f000)
> libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc1cfb9c000)
> Это - НЕ СТАТИКА
> Должно быть: not a dynamic executableДавно это было, задача была от libstdc++ избавиться.
libc статиком - не проблема, только нафига если она
в системе юзается другими.
>только нафига если она
> в системе юзается другими.Далеко не везде есть glibc, как самый яркий пример Alpine Linux, где даже правильно скомпилированный статически исходник ликнутый с glibc работаь не будет, в то время когда настоящий статический бинарник будет работать на всех версиях внутри платформы
Пример: https://www.opennet.me/openforum/vsluhforumID3/129432.html#256
> libc статиком - не проблема, только нафига если она
> в системе юзается другимиБанально — к примеру, у меня есть сборочный хост с glibc 2.32 и я хочу собирать на нём один портативный бинарник, который бы будет запускаться на любом LTS линуксе.
Собираю и получаю падение на CentOS 7, потому что символы всё равно берутся из glibc, но версия символов не совпадает с рантаймом.
> Да что ты говоришь, родной... Правда, что ли? Пойду расскажу коллегам по подвалу, а то "мужики-то не знают".Ну скомпилируйте там, сообща, sqlite3 к примеру для х86_64 под линолиум ;)
Не забудьте похвастать как получится
В чем проблема?test@test:~/test$ cat test.c
#include <sqlite3.h>
#include <stdio.h>int main(void) {
printf("%s\n", sqlite3_libversion());
return 0;
}
test@test:~/WORK/test$ cc test.c -I sqlite3/include -l sqlite3 -L sqlite3/lib -static -static-libgcc -pthread -ldl -lm
/usr/bin/ld: sqlite3/lib/libsqlite3.a(sqlite3.o): in function `unixDlOpen':
~/test/sqlite-autoconf-3400100/sqlite3.c:43242: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
test@test:~/test$ ./a.out
3.40.1
test@test:~/test$ readelf -d a.outThere is no dynamic section in this file.
> В чем проблема?может в этом?
> warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linkingоно у тебя статическое в плане формата бинарника, но dlopen немного мешает. Например в зависимости от конфигов хоста glibc будет подгружать модули с хоста и эти модули могут не подойти
В чем проблема взять статически собранную libc и залинковать?
ну да бинарник будет толстый :))
а можно еще вырезать поддержку модулей.Проблема в том, что ты не сможешь залинковать все модули. Например у пользователя более свежая версия libc и там появилось несколько новых модулей, которых нет в бинарнике или у него вообще свой модуль. Загрузить мы их не можем, будем игнорировать настройки системы и станем работать с тем, что есть?
т.е. приходим к тому, что libc в общем случае получается не совсем статическая и надо либо ее резать, либо впихивать в нее какой-то набор модулей и работать только с ним в нарушение настроек.
Вам шашечки? или ехать?
если ехать то статический бинарник который работает везде, либо окружение с shared библиотеками которым нужно только ядро...
я просто говорю, что в общем случае получить "статический бинарник который работает везде" с glibc нельзя. Если мы что-то колдуем с модулями, то это уже не "общий" случай и оно все равно может не заработать везде.
еще раз задаем вопрос.
почему нельзя взять статический libc с тем что тебе нужно????
религия не позволяет??
на хосте используется libnss_ldap:
1. ты про него забыл. Твой "статический бинарник который работает везде" продолжит работу с непонятным результатом или завершится?
2. ты про него не забыл, но он бесполезен, т.к. на хосте настройки для более новой версии. Твой "статический бинарник который работает везде" продолжит работу с непонятным результатом или завершится?а теперь представим, что на хосте используется лютая экзотическая проприетарщина libnss_wtf, исходников для которой нет. Как будем поступать?
> почему нельзя взять статический libc с тем что тебе нужно????
потому что ты должен взять статический libc с тем, что нужно пользователю.
Если пользователь ты и окружение, где исполняется бинарник, под твоим контролем, то проблем нет.
ну так бы и сказал, сферический конь в вакууме скорее всего не поедет...
ну я и говорил, про "общий случай"
но тут не конь в вакууме. glibc такой и задумана — она использует модули в зависимости от конфигов хоста.Я даже не уверен, что в более частном случае, например при использовании libnss_systemd, получится добиться успеха при разных версиях systemd
glibc сама не использует dlopen. А что есть в статическом бинарнике дак то и есть.
> glibc сама не использует dlopenпросто грепом по исходникам:
inet/idna.c
nss/nss_module.c
iconv/gconv_dl.cдаже твой статический sqlite3 смотрит в /etc/nsswitch.conf, а потом ищет и открывает libnss_files или libnss_sss. (да, я запускаю бинарники от анонимов)
>> glibc сама не использует dlopen
> просто грепом по исходникам:
> inet/idna.c
> nss/nss_module.c
> iconv/gconv_dl.c
> даже твой статический sqlite3 смотрит в /etc/nsswitch.conf, а потом ищет и открывает
> libnss_files или libnss_sss. (да, я запускаю бинарники от анонимов)Я все равно не понимаю тебя. В общем случае для программы, использующей плагины, тащи их и их полный рантайм в LD_LIBRARY_PATH. На сам статический бинарник это не влияет.
> для программы, использующей плагиныglibc сама по себе использует плагины, поэтому любая программа слинкованная с glibc использует плагины glibc. Какие плагины будут использованы зависит от вызываемых функций и настроек хоста пользователя. На хосте может быть установлен и настроен произвольный набор плагинов glibc, которые твой статический бинарник не сможет использовать или сможет, но результат непредсказуем (segfault например).
предупреждение как раз об этом — в общем случае статический бинарник с glibc не самодостаточен
>> для программы, использующей плагины
> glibc сама по себе использует плагины, поэтому любая программа слинкованная с glibc
> использует плагины glibc. Какие плагины будут использованы зависит от вызываемых функций
> и настроек хоста пользователя. На хосте может быть установлен и настроен
> произвольный набор плагинов glibc, которые твой статический бинарник не сможет использовать
> или сможет, но результат непредсказуем (segfault например).
> предупреждение как раз об этом — в общем случае статический бинарник с
> glibc не самодостаточенСтатическая версия glibc.a не использует плагины, Вы заблуждаетесь. Нужно только плагин программы и его зависимости. Об этом и предупреждают.
>>> для программы, использующей плагины
>> glibc сама по себе использует плагины, поэтому любая программа слинкованная с glibc
>> использует плагины glibc. Какие плагины будут использованы зависит от вызываемых функций
>> и настроек хоста пользователя. На хосте может быть установлен и настроен
>> произвольный набор плагинов glibc, которые твой статический бинарник не сможет использовать
>> или сможет, но результат непредсказуем (segfault например).
>> предупреждение как раз об этом — в общем случае статический бинарник с
>> glibc не самодостаточен
> Статическая версия glibc.a не использует плагины, Вы заблуждаетесь. Нужно только плагин
> программы и его зависимости. Об этом и предупреждают.Смотрите код, там или явные ifdef, или "откроем библиотеку, а если нет, поищем и без неё в самом бинаре".
так "не использует плагины" или "откроем библиотеку"?> поищем и без неё в самом бинаре".
и что произойдет, если в бинаре нет подходящей?
>> glibc сама не использует dlopen
> просто грепом по исходникам:
> inet/idna.c
> nss/nss_module.c
> iconv/gconv_dl.c
> даже твой статический sqlite3 смотрит в /etc/nsswitch.conf, а потом ищет и открывает
> libnss_files или libnss_sss. (да, я запускаю бинарники от анонимов)Нет, не вводи нас в заблуждение, при статической линковке там обходные пути.
какие?$ strace 2>&1 ./sqlite3 | grep ^open
openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/ld-linux-x86-64.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/user/.sqliterc", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/user/.sqlite_history", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/terminfo/x/xterm", O_RDONLY) = 3
openat(AT_FDCWD, "/user/.inputrc", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/inputrc", O_RDONLY) = 3
>[оверквотинг удален]
> openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
> openat(AT_FDCWD, "/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
> openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
> openat(AT_FDCWD, "/lib64/ld-linux-x86-64.so.2", O_RDONLY|O_CLOEXEC) = 3
> open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
> openat(AT_FDCWD, "/user/.sqliterc", O_RDONLY) = -1 ENOENT (No such file or directory)
> openat(AT_FDCWD, "/user/.sqlite_history", O_RDONLY) = -1 ENOENT (No such file or directory)
> openat(AT_FDCWD, "/usr/share/terminfo/x/xterm", O_RDONLY) = 3
> openat(AT_FDCWD, "/user/.inputrc", O_RDONLY) = -1 ENOENT (No such file or directory)
> openat(AT_FDCWD, "/etc/inputrc", O_RDONLY) = 3file ./sqlite3 ?
вы же сами можете запустить файл из своего поста. Там таки вирус? :)$ file ./sqlite3
./sqlite3: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=40a90728237f33e18647d91a31e9c9f4209c9773, for GNU/Linux 3.2.0, not stripped
> вы же сами можете запустить файл из своего поста. Там таки вирус?
> :)
> $ file ./sqlite3
> ./sqlite3: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked,
> BuildID[sha1]=40a90728237f33e18647d91a31e9c9f4209c9773, for GNU/Linux 3.2.0, not
> strippedНе нервничай, истина того стоит. Открыват если есть.
sudo chroot . ./sqlite3
SQLite version 3.34.1 2021-01-20 14:10:07
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>Вот ему неоткуда взять, и что это для нас означает?
это означает, что sqlite не использует nss, по крайней мере при простом запуске, а обращение к библиотекам происходит из-за инициализации частей самой glibcВряд ли sqlite вызывает getaddrinfo или что-то подобное. Вообще на мой взгляд пример неудачный, т.к. взаимодействия с чем-либо кроме файлов там вроде нет. /etc/passwd оно конечно прочитало, но я не знаю, есть ли в sqlite функции связанные с пользователями системы
Ну и пусть, на этой остановке я пожалуй сойду. Просто нет такой помойки в Linux чтобы libnss* с собой таскать.
Это предупреждение как я понял из экспериментов говорит о том, что загружаемя dlopen библиотека все равно потянет свой рантайм своих ldd зависимостей. Это не значит что мы должны переносить рантайм с бюилд системы.
> Это предупреждение как я понял из экспериментов говорит о том, что загружаемя
> dlopen библиотека все равно потянет свой рантайм своих ldd зависимостей. Это
> не значит что мы должны переносить рантайм с бюилд системы.Если не использовать читинг с мюслями, то c glibc это облом
```
wget https://www.sqlite.org/2022/sqlite-amalgamation-3400100.zip && unzip ./sqlite-amalgamation-3400100.zip
cd ./sqlite-amalgamation-3400100gcc -O2 \
-DHAVE_USLEEP \
-DSQLITE_DQS=0 \
-DHAVE_READLINE \
-DSQLITE_USE_ALLOCA \
-DSQLITE_THREADSAFE=0 \
-DSQLITE_ENABLE_FTS4 \
-DSQLITE_ENABLE_FTS5 \
-DSQLITE_ENABLE_JSON1 \
-DSQLITE_ENABLE_RTREE \
-DSQLITE_ENABLE_EXPLAIN_COMMENTS \
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
shell.c sqlite3.c -static -lpthread -ldl -lm -lreadline -lncursesw -o sqlite3
```сикля простой пример, но если добавить сетку, то с glibc будет еще веселей.
LD_LIBRARY_PATH тоже проблемно, побробуйте компильнуть PHP как статический CLI бинарник используя glibc, естественно не голый, а хотя бы с
bcmath
calendar
ctype
curl
dom
filter
gd
hash
iconv
inotify
json
libxml
mbstring
mongodb
mysqlnd
openssl
pcntl
pdo
pdo_mysql
phar
posix
redis
simplexml
sockets
sqlite3
pdo_sqlite
swoole
tokenizer
xml
xmlreader
xmlwriter
zlib
> В чем проблема?Можно глянуть на uname -a ?
И: ldd sqlite3
>> В чем проблема?
> Можно глянуть на uname -a ?
> И: ldd sqlite3$ uname -a
Linux whyberg 5.16.0-0.bpo.3-amd64 #1 SMP PREEMPT Debian 5.16.11-1~bpo11+1 (2022-03-02) x86_64 GNU/Linux
$ ldd ./sqlite3
linux-vdso.so.1 (0x00007fff5ebab000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fbb1363d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbb134f9000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbb134f3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbb134d1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbb132fc000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbb1381f000)
вот когда ldd ./sqlite3 начнет выводить для той же самой строки компиляции:```
not a dynamic executable
```вот тогда можно будет смело сказать что компиляция статическая и бинарник можно таскать в пределах платформы и не нарываться на облом что glibc не совместима
и че дальше :) ?
$ ldd sqlite3
not a dynamic executable
> вот когда ldd ./sqlite3 начнет выводить для той же самой строки
> компиляции:
> ```
> not a dynamic executable
> ```
> вот тогда можно будет смело сказать что компиляция статическая и бинарник можно
> таскать в пределах платформы и не нарываться на облом что glibc
> не совместима
> и че дальше :) ?А слабо самому (ну или "других мужиков с подвала" попросить) попробывать на Alpine Linux и убедится - Работать, не будет
Alpine Linux принципиально?$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$ uname -a
Linux cbttest 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$./sqlite3
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>напомню что собиралось все на машине вот такой
$ uname -a
Linux sqlitetest 5.16.0-0.bpo.3-amd64 #1 SMP PREEMPT Debian 5.16.11-1~bpo11+1 (2022-03-02) x86_64 GNU/Linuxну и вишенкой оно и в chroot(пустой каталог с бинарником sqlite3) работает...
> Alpine Linux принципиально?Да, в силу того что он основой в докерах, а еще есть QNX, Void, Oasis, Chimera, Dragora, KISS... a еще чтобы не нарваться в лямбде на облом типа Opps, Glibc 2.xx not found
> cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
на нем есть glibc, поэтому и работает. В предупреждениях компилятора явно говорится что такая "статика" будет работать только там где есть glibc в системе, т.е. тоже самое что и с динамикой, - зависимость от внешей либы.
Я единстенное, что призаню, что пример с sqlite был плохой идеей (хотя если нацеплять на него полезные плагины, то он загнется тоже 100%)
В chroot оно работает только потому, что там нужна только функция поиска домашнего каталога, на что сикля ложет просто балалайку.
Весь смысл разговора был в том, - что с современным glibc нельзя сделать полноценный статический бинарник, и мой пример с getaddrinfo наглядно это показывает, выкручивайтесь как хотите с ключами для компилятора, но в системах где нет glibc - оно работать не будет
Для любителей ставить минусы, - домашняя задачка:https://www.opennet.me/openforum/vsluhforumID3/129432.html#256
Компильте со "статической glibc", а потом поробуйте резолвнуть ваш любимый сайт запуская бинарник поd Alpine Linux
У нас в подвале pthreads при статической сборке на свежей убунте отвалились. Какой-нибудь join теперь пустышка, и нормально не подхватывается.
Нам нужен эмулятор x86 на процессе x86. Чтобы проприетарщина без sse с помощью эмулятора ускорялась инструкциями sse.
Может рекомпилятор тогда?
Эмулятор или рекомпилятор x86/x86_64 на/для RV64.
Под C/C++ существуют рекомпиляторы? Есть ли удобный способ декомпилировать бинарник, а потом его собрать заново?
Может тебе еще корову из котлет восстановить? Компиляция односторонний процесс. Его полное реверсирование невозможно. Некоторые штуки типа ida пытаются опознать типовые функции типовых рантаймов, понимают прототип вызова, но на этом все.
реверс - это восстановление алгоритма, а не как именно называлась переменная. и да, полный(!) реверс очень даже возможен. и мало того, что возможен, так еще куча народу этим постоянно занимается.
> реверс - это восстановление алгоритмабинарный код - тоже описывает алгоритм. Причем наиболее приближенным к аппаратуре способом.
Но реверс таки нужен - для _понимания_ алгоритма.Если переменные после "декомпилятора" называются var1 и var2, а функции - func0001/0002/и так далее - вряд ли ты разберешься в чем-то посложнее своего любимого хеловрота.
> еще куча народу этим постоянно занимается.
занимается. Вручную.
Но в результате получается - переписанный код, а не возврат к оригиналу.
Иногда - работающий неправильно, потому что что-то где-то недопоняли или не угадали.
Забавно что вчерашние школьники даже не представляют себе как можно понять алгоритм с var1 и var2, а не total-count-of-money-spent-in-the-mall. Но при этом так авторитетно рассказывают, так авторитетно ))Как же энтузиасты отреверсили майнкрафтик до состояния полностью читабельного кода? Из var1 и var2?
С майнкрафтом проще хотябы потому, что у джавы байткод лучше декомпилируется (то есть с теми же var1, func_1488), и классы разложены по разным местам.
В большом нитивном блобе хрен разберёшь даже где данные а где код, и оптимизации могут очень всё попортить.
> В большом нитивном блобе хрен разберёшь даже где данные а где код,
> и оптимизации могут очень всё попортить.Вполне нормально раскладывается. Тем более, что есть инструменты. Тыкнул в иде "с" - вот тебе и код.
Забавно наблюдать как ты пыжишься, пытаясь изобразить себя умнее всех, а по факту - д-л д-лом. Осилил хеловрот на двенадцати платформах... а, снова не ты осилил.> Как же энтузиасты отреверсили майнкрафтик до состояния полностью читабельного кода?
Так же как ты мог бы "отреверсить" даже вообще бинарный код (правда, у x86 он не очень удобочитаем - но можно). Ну а чего - ручка, бумажка, сто лет впереди.
> Из var1 и var2?
afair, жабка сохраняет имена переменных в коде, если специально не стараться.
Ну и "отреверсили" - не декомпилировали. Тебе ведь никак не понять разницу? Отреверсить можно и вовсе mov eax, dword ptr [esi+2fb4h] - если у тебя впереди бесконечность. (У игроков в майнкрафт так-то, да)
Очень удобно и, главное - очень, очень похоже на тот прибор, куда суют колбасу а получается обратно баран. [Нет. Этот прибор умеет обычно хорошо что-то одно.]
>> Если переменные после "декомпилятора" называются var1 и var2, а функции - func0001/0002/и так далее..Есть декомпиляторы восстанавливающие смысл значительной подобных имен, и делают выхлоп декомпилятора более понятным. И так же строят карту кто что использует, что вызывает, наложение участков памяти, и нестандартные места.
Человек про компилятор спрашивал, а не про народ.
Не это нужно чтобы выполнять программы с no exec разделов. Но хитрый Тео де Радт уже запретил mmap (MAP_ANON|MAP_EXEC)
Опять штука которая ничего не умеет оказалась быстрее на полтора виртуальных попугая
неплохой эмулятор, пользуюсь уже года 4, пока все устраивает
> неплохой эмулятор, пользуюсь уже года 4, пока все устраиваетЭта деваха на редкость умничка, редкий хакер(в хорошем смысле слова), побольше бы таких
Бл... да она,оно,он... короче того этого... приехали, а я то уж повелся, думал новая Рутковски...
Эта деваха - эмулятор.
blink -- это SIP-клиент, https://icanblink.com/Качество эмуляции у этих ребят такое же, как и скилл нагуглить уникальное имя?
у тебя в паспорте тоже негуглящееся имя?
ага, 5000 программ разного назначения и все называются nginx. Еще 10000 - Exel. И Emacs несколько сотен, часть из них базы данных, другие - браузеры, третьи - игрушки уровня AAA. Ну а чё, других имен то нет, только Саша, Маша и Марина.
Blink это HTML-движок хромых браузеров, а не эти ваши SIP-клиенты.Совсем у авторов названия кончились, я смотрю.
Blink это мигать
TO blink! Эх, молодежь, всему учить надо.
У меня в школе французский был, а эти ваши инглишы мы не изучали!
Позиционная связь в грамматике - не мой конёк, я не знаю как переводить такие отдельные английские слова, они мало значат.
Blink - это фидошный софт под OS/2
Был такой, да. Ему ещё морду отрывать надо было, иначе память текла и нода за пару суток крашилась.
А точно не bink? (фидошники тут binkd когда-то собирали)
и bink был, и tmail, и golded
А Blink был только для чтения почты. Даж не нашел в инете ссылок.. Он еще до появления google помер
нули праху его.
Эту штуку лучше рассматривать как DBI/DBA систему наряду с Valgrind или DynamoRIO.Пока в зачаточном состоянии, но написть, например, отладчик памяти по аналогии с memcheck или Dr. Memory — весьма прямолинейная задача.
Открытым вопрос остаётся как Blink разруливает ситуацию с самомодифицирующимся кодом — фиременный pain-in-the-ass для проектов такого рода.
Самомодифицирующийся код, ужас какой, все безопасники от этого бегут, джит мешает многим, а тут чудеса какие не для простых смертных.
На мой вкус W^X такому коду и убить при поползновении, как эксплойт или малварь. Легитимных поводов это делать довольно мало. Особенно под вон той штукой.
Так как раз в том и прикол что малвари как раз надо запускать в виртуалках чтобы они не трогали что не велено.
Или предлагаешь прямо на
В критичных к быстродействию местах самомодифицирующийся код не заменим ни как, кроме как несколькими экземплярами части ПО. Я не говорил про 3-4 экземпляра. Больше.Но.. это или в очень хитрых играх в стародавние времена, или в эмуляторах, или в узкоспециализированном ПО.
В общем, если не сможет это переварить, мир не перевернётся.
Автор(ша) была раньше автором. Так можно под новую статью РФии попасть)
https://en.wikipedia.org/wiki/Justine_Tunney
Это пример того, что те, кто говорят, что они недолюди, бесполезны и даже не программируют, а только COC пишут - врут.
Ну ведь второй-то пункт - выполнен?
Думаю, скоро оно совершит <роскомнадзор>.
Ого, судя по биографии, автор(ша) умудряется сочитать повесточку с "техно-фашизмом" (считает тебя не просто привелигированным цисгендерным чудаком, но ещё и тупым), левацкий социализм в духе "отнять и поделить" вместе с обожанием "правильных" корпораций (Google, где ему/ей дали работу), право на протест вместе с цензурой всех кто с ним/ней не согласен. "Интересная" личность, в общем.
> Автор(ша) была раньше автором.ето просто эмуляция сработала
> Код проекта написан на языке Си (ANSI C11)Нет покоя безумцам
K&R наше фсё!
Согласен, нужно было писать на чём-то нормальном типа lisp или ocaml.
Если считать, что раздувание и усложнение ПО - заговор, то многие её программы подтверждают его. И то же с Фабрисом Белларом.
А власти скрывают!
> опережающий QEMU по производительностиВ этом нет ничего особенного.
> Cosmopolitan, RedbeanЗа таких павлино-утко-ежей розгами сечь надо.
Такие секатели розгами в реальности начинают лепетать, что розга это абстракция и вы меня не так поняли.
А уж как в реальности начинают лепетать те, кто грозился пообщаться в реальности с секателями розгами - заслушаешься!
Заявлено в 2 раза быстрее
Переизобретая Яву.
Ох, ёлки... Какую только ересь не изобретут, лишь бы вые... попасть в книгу рекордов долбо... придумать что-то оригинальное, не шибко то полезное, но оригинальное.А Wine/Crossover для кого придумали? Не, вы не понимаете, это другое? Или "Фу, старьё!!! Уноси, надо новое!". А ничего, что задача QEMU — полная эмуляция аппаратной платформы? То есть не для юзверей, а для разработчиков.
Вот и пришла эпоха кибернеформалов. Весь Github завален этим кринжем.
А в чем кринж? Вполне годная штука, если нужно запустить бинарь на неродной платформе.
Угу. Статический (!) бинарь. Линуксный (!) x86-64 (!) статический бинарь.
Очень-очень нужно запустить на неродной платформе.Ты й..нутый или да?!
Чувак, если все твои задачи сводятся к кручению виджетов в кде, то бери смузи и отваливай, не твоего ума.
Она сама использовала для разработки и типа топит за статические бинари с космополитан. Для такой разработки нужно, я думаю.
А что сложного добавить динамические?
> Она сама использовала для разработки и типа топит за статические бинари с
> космополитан. Для такой разработки нужно, я думаю.
> А что сложного добавить динамические?А я знай?
Я боюсь в код ЭТОГО заглядывать. Так что нет даже предположений о том как хотя бы чисто технически достигнут сей "успех" (в конце-концов - ld.so вполне себе статический бинарник, если что).Но, думаю, ларчик просто открывается - ЭТО работало в гугле. Т.е. бинарники на которых ОНО тренировалось - вполне вероятно - игогошные (а вовсе не космополитские какие). Никаких "dlopen" и никаких проблем. Что бывают еще какие-то другие - ОНО могло и не знать просто. Вот зачем бы тебе понадобилось такое запускать на чем-то кроме того на чем оно и так - это вопрос эсхатологический, тут его бестолку задавать.
Зато оно в двестиписисят раз быстрее куемы! (загадка даже, как это удалось сравнить)
и в чем проблема? проприетарное ПО ооочень часто распространяется как статический бинарь и чаще всего собирают только под x86_64, а тебе надо запусткать на чем-то маленьком с aarch64. и оно вовсе не обязательно ресурсожрущее и/или риалтайм.+ аналогичный кейс когда для разработки используется macos на m1/m2 (который тоже arm64=aarch64)
> Угу. Статический (!) бинарь. Линуксный (!) x86-64 (!) статический бинарь.
> Очень-очень нужно запустить на неродной платформе.Хозяйке на заметку: найдите слово statifier на http://altlinux.org/эльбрус/rtc/перепаковка (насколько понимаю, дальше те же ребята сделали более универсальный magic ermine).
Пользовался я как-то этим башегуано statifierом. Не помог, сгенеренная программа запускаться отказалась. Не на C была написана.
> Пользовался я как-то этим башегуано statifierом. Не помог, сгенеренная программа запускаться
> отказалась. Не на C была написана.Как будто тебе помогло бы то, что она была бы на си...
> Угу. Статический (!) бинарь. Линуксный (!) x86-64 (!) статический бинарь.Всякие пропрентарные гамезы например.
> А в чем кринж? Вполне годная штука, если нужно запустить бинарь на
> неродной платформе.Если надо протестировать "железо", есть QEMU.
Если надо просто запустить, есть WINE и WSL.
Приложения FreeBSD под GNU/Linux и GNU/Linux под FreeBSD под одной платформой я запускал и так.В статье же говорится про эмулетранслятор под одной платформой — x86_64 (amd64).
> Если надо протестировать "железо", есть QEMU.хнык... ты бы знал как ты далек от просветления...
> Если надо просто запустить, есть WINE и WSL.
Это если винду в венде. А вдруг нет?
> Приложения FreeBSD под GNU/Linux и GNU/Linux под FreeBSD под одной платформой я
> запускал и так.оно и этого не умеет.
> В статье же говорится про эмулетранслятор под одной платформой — x86_64 (amd64).
нет, там вообще такого не говорится (хотя вряд ли оно соберется хоть под чем другим)
Там говорится что _запускать_ оно умеет покачто только x86_64 lin00ps и более ничего.
просто автор этого так называемого "продукта" даже не понимает что написал, а новость публикует.
Я к публиканту новости никакого отношения не имею. Он и правда не понимает что я написало, но я-то тут причем?Я вообще ни о каких рассейских сайтах не в курсе и не хожу на них.
Мы в курсе. У меня на моем компе спокойно выполняются чруты armhf и aarch64 с помощью qemu-user-static.
один из немногих разумных комментариев во всей новости, достойный отлития в граните.
> А Wine/Crossover для кого придумали?Попробуй им хоть что-то запустить на RISCV или aarch64? Чем тут вайн вообще поможет? А вот эта штука бодренько так x86-64 -> target транслирует.
Wine/Crossover это транслятор winapi, какое он вообще имеет отношение к эмуляторам архитектур процессоров?
> Wine/Crossover это транслятор winapi, какое он вообще имеет отношение к эмуляторам архитектур
> процессоров?Никакого, но авторы проекта решили создать гибрид транслятора и эмулятора. Потому Wine/Crossover имеют отношение к упомянутому проекту.
>значительным приростом производительностиНу если повыкидывать все условные переходы, какие есть в qemu, то действительно производительность прирастёт. Но зачем? Зачем нам несколько процентов производительности в обмен на неприминимость к реальному миру?
А он точно хорошо эмулирует?)))
А чего это никто не орет что musl им не нужен? А то ведь глядите, сначала кто-нибудь запустит wine на малинке, потом игру с этим инструментом и потом ваше х86 железо станет ненужным ибо само уже давно теряет производительность из-за совместимости с х86. А интел то уже и так сливает амд. И нвидия сливает амд, особенно в линуксах.
Того и глядишь до Эльбрусов доберутся со своей ускоренной трансляцией окаянной и нельзя будет тупо орать что купленный у продавана старый штеуд еще годится для игорей.
А какая попа боль будет выбирать из Российских армов и Эльбрусов. Ну хоть на Байкал уже можно это вкорячить да глянуть что там с фэпээсами да ребятки?
Так ведь не охота из винды выползать на свет божий.
Из-за проблем с государством очень опасно брать эльбрусы и байкалы, если их будут впаривать населению - тут никакой особенной теории заговора припахивать не надо.
> Из-за проблем с государством очень опасно брать эльбрусы и байкалы, если их будут впаривать
> населению - тут никакой особенной теории заговора припахивать не надо.Скорее телеграфируйте детали зпт волнуюсь тчк.
// я всерьёз чуть не сполз под стол, прочитав это с домашнего "Эльбрус-16С"
> с домашнего "Эльбрус-16С"И? Похвастался? Молодец. Но для широких масс этот агрегат всё равно недоступен, как по деньгам, так и чисто физически не продаётся в каком-нибудь DNS'е. Разумнее по параметрам цена\производительность купить комплект на зеонах с али.
А ты широкая масса? Не признал так сразу. Те кто не могут себе позволить купить компьютер могут на вторичном рынке поискать предложения подешевле.
А тут видишь ли взрослые дяди ходят, которые имеют деньги и общаются и они не как широкие массы и способны выделить из бюджета сумму на покупку компьютера.
А смысл покупать за много денег дохлую платформу с проприетарным компилером? Производить это все равно не на чем.
То то интеловцы изо всех сил пытались такую платформу осилить, да не смогли.
Компилятор часть платформы. И GCC могут сами добавить нужные компоненты. Или ты думал на простых платформах простые компиляторы были бесплатными?
Если ты подозреваешь, что что-то происходит не так выучи ассемблер Эльбруса и дизассемблируй свои хеллоуворлды.
И то что ты не в курсе, что китайцы осилили техпроцесс это наверное для тебя персонально должны найти новость.
А то может еще чего тебе лично найти про то как чюв России решают данный вопрос? Ты не оборзел там слишком? Мне бы задохлый 12900к поменять на эльбоюрус 16С и я был бы счастлив.
А тебе Интел и Амд уже открыли прошивки процов? :))))) А Нвидиа? А изготовители процов на АРМ? :))))))))))))))))))) Толку что компилятор открытый, когда в самих железках всё закрыто и живёт своей жизнью. И Эльбрусы не мёртвая платформа.
Вот я дурак, купил себе новую Тойоту! Надо было Опель Кадет на вторичке поискать!
Если денег только на почти новую (фе)калилину, то старый Опель более комфортный вариант. Хотя и не Кадет. :)
Разумнее? Зионы не оч для бытовых задач. И тот же фотошоп гораздо лучше работает когда там турбобуст 5ггц пусть и не долго. Древним зионам без симд место на помойке опять же. Зионы имеет смысл только на задачах типа баз данных (сюда же и более жирные кэши), или сервера (много подключений, много клиентов, задержки имеют значение больше скорости обработки процессором). Высокая стоимость не даст прироста производительности на бытовых задачах, для них есть несколько другие процессоры. А вот у сабжа восьмиканальная память и прямо интересно насколько хорошо она себя проявляет, потому что есть очень много задач, на которых память это узкое место.
> И тот же фотошоп гораздо лучше работает когда там турбобуст 5ггц пусть и не долго.Как то поржал от души. Зачем тебе последний Фотошоп? У меня на моём i9-9900K стоит Фотошоп 7.0 эпохи Windows 98, и я на нём делаю то, что школоло с ютуба даже на последних версиях с всякой тряхомудией типа AI близко не умеют.
> Как то поржал от души. Зачем тебе последний Фотошоп? У меня на моём i9-9900K стоит Фотошоп 7.0
> эпохи Windows 98который не умеет в 32бит, поэтому любые операции теряют данные?
Который не умеет в память больше единственнодоступной w98 гигабайтной (да и та с ограничениями) и нещадно насилует "scratch disk"? (надеюсь как верный поклонник доисторического хлама ты нашел ему под это ide dtla и наслаждаешься звуками "scratch"ей пока оно неторопливо рисует превьюшку к фильтру - заново на каждый движ регулятора)
У которого нет ACR вообще? (а еще ее надо обновлять вместе с камерой... впрочем, у тебя ж небось дедулин "зоркий", и вообще зачем фотошоп, щас-щас-щас, проявитель разведешь)В котором даже просто увеличить картинку для попадания в разрешение принтера - хуже, чем просто ее отправить печатать как есть (потому что принтер может умеет в бикубик, а мы тогда изобретали ужасти вроде "stair interpolation" или вынуждены были использовать 3d-party софт)
Ну да, ну да... делаешь то что никто уже даже близко не умеет - и не хочет, ибо незачем др-ть в присядку.
Поставьте уже себе Dr. Halo в досбоксе, зачем себя фотошопом мучить.
Вам скорее не страшно, пока. И вам не впаривали же, вы сами взяли, ещё и сложно как-то за большие деньги. Так что я не уверен, что там есть закладки. Но они появятся, когда эльбрусы будут позиционироваться именно для дома и стоить дешевле.
На интелах закладки с рождения. Всем плевать.
Уже обсудили, важны не только закладки, но и пользование ими, а также "законодательные нормы". Это настолько очевидно, что просто совсем. Кроме того есть разные "стили управления", так что их наличие там менее очевидно. Разумеется из всего этого вытекает, что они не будут использовать их для массовых дел, так как их не это беспокоит. А вот у нас сделают, ибо всё держится на насилии и трон шатается.
Ну и более конкретно - я не в США живу, закладки других стран лучше, особенно не очень дружественных. В моём сообщении и про это как-бы есть, но оно путаное и многозначное.
> закладки других стран лучшеПоддержу. Сам выхожу в интернет исключительно с личного VPN на базе WireGuard, VPS'ка с которым расположена в "недружественной" стране. Про товарища майора забыл как о страшном сне.
а у т-ща майора на дашборде красный флажок: "весь трафик в ваергарде,
весь обмен только с одним IP, открытого трафика вообще нет".
Я всерьёз чуть не сполз под стол, прочитав про «домашний "Эльбрус-16С"»
ой вей
> будут впаривать населениюКак можно впарить компьютер на котором не идёт винда условному Васе со средней зарплатой 12к рублей даже для МСК.
> Как можно впарить компьютер* за тысячи баксов
Ах ну конечно. Вася же винду по 16000 покупает с зарплатой в 12000 чтобы купить подешевле себе железо, а потом еще на игори тратиться готов.https://www.dns-shop.ru/product/8175d0af45b4ed20/operacionna.../
К тому же в Москве зарплаты выше. Я уже молчу про поднятый МРОТ. Вас там из криокамеры наверное только по праздникам выпускают чтобы вы могли с пьяни с просону, да еще до кучи с бодуна ояпнуть свои очень важные 12 копеек как будто Васю заставляют покупать 16 ядерник вместо 12.
Самые богатые и самые жадные же (и воровитые, по крайней мере на постсовке). Видел много поцев с компом за овердофига денег (есесссно у них не только комп из имущества), которые не то что винду, лицуху любимой игры в стиме на распродаже со скидкой 80 и выше процентов жмутся купить.
Богатые не создают себе долги. А имущество еще удержать нужно. Так что вряд ли можно брать с таких пример. Их жизнь поставит на место как и наглосаксов. Игр уже столько навыпускали, что я менее 80% скидки и не смотрю больше. Ну правда, кто хочет заплатить за какой-нибудь Tekken 7 полную сумму? Так что если есть деньги на багет/пряники/кофе то и на игры найдутся.
И да, я гоняю на линуксе.
Современные игры полны убогой тухлой механики, так что юольшинство все равно не стоит внимания.
Где механика основанная на физике?
Нвидия же типа ускоритель физики. Все типа ж натурально.
За 20 лет после халф лайфа так и не родили физику. Так что 100 рублей максимум игры стоят.
Там просто нет современных технологий.
А то потом гномы валят на землю гигантов и это типа нормас и совсем не издевательство над здравым смыслом.
> винду по 16000 покупаетЭто такой троллинг тупостью? Разве винду (да и вообще программы) кто-то ПОКУПАЕТ?
Да не тупи. Конечно покупают. И в паре с ноутбуками тоже.
И что ты тогда на опеннете делаешь? тут никто не покупает.
Там идёт винда. Через трансляцию, причём транслятор и запускается без ОС (сам себе ОС), вместе с драйверами и всё такое. Тормозит конечно, но не "до ужаса". Они даже киберпанк запускали и он даже не сильно тормозил.
Кстати они не быстрее потому что большая часть аппаратного обеспечения не эмулируется?
> Кстати они не быстрее потому что большая часть аппаратного обеспечения не эмулируется?я боюсь это смотреть, но по описанию похоже что потому что большая часть линуксного ведра - параэмулируется. То есть не аппаратное, и даже не паравиртуальные драйверы, а ядерная паравиртуалочка.
Понятно что не работает ничего сложнее хеловрота, но для хайпа - сойдет.
А зачем ему это делать?
На arm телефон установил Limbo ( qemu для android ). Тормоза дикие, сливает даже 386му. Вот бы стоящая альтернатива была...
Какая-то хрень непойми как даже запускается.
полностью поддерживаю. Автор этого так называемого "продукта" вообще не понимает что делает.
Вообще говоря, для RISC-V железа небесполезный проект.
Но нишу использования сильно сужают статические бинари и то,
что на ARM есть, например, Box86, FEX-Emu, дающие производительность
близкую к нативу и адаптированные для реальных юзеркейсов.
Обращает на себя внимание отсутствие AVX в списке поддерживаемых инструкций. Не означает ли это что x86_64-программы в этом эмуляторе не будут работать чуть менее чем все?
AVX максимально бесполезен, а системы без AVX2 как-то работают и сегодня. В основном это поддержка в коде, по примеру как ffmpeg делает автодетект доступных инструкций в рантайме. Но, если ты скомпилируешь с такими параметрами, что avx обязателен, то бинарь исполняться не будет, и придётся потеть. Но такого софта не существует, ты сам должен отстрелить себе голову. Обычно таргет сегодня msse42 или msee41.
> Но такого софта не существуетСовременные игрушки очень многие используют AVX или AVX2. Несколько лет назад в игры для совместимости два екзешника клали - вроде gamename.exe и gamename_avx2.exe
Странная затея, особенно учитывая, что частота режется. Даже если не режется, температура повышается и начинает тротлить. Когда это целесообразно в играх всегда использовали simd, только, когда они нужны, и им отдельный бинарь не надо.
На macOS научили Rosetta устанавливать deb пакеты, так что эмулятор ему и не особо нужен, хотя для маков софта и так предостаточно хорошего, не нужна в принципе и Rosetta.
> для маков софта и так предостаточно хорошегоСпасибо, перед сном поржал от души.
Я тут не так давно смотрел по новостиhttps://github.com/buttplugio/awesome-buttplug
Количество Windows Only конечно большое
Эм... но это же некорректно сравнивать с QEMU, если оно только линуксовые бинари умеет
Сделали ли бы уже какой-то интерфейик для запуска всякого неподходящего для данной платформы что бы так же как wine подхватывал все на лету а то опять сиди выбирай чего там под о что там
> It's designed to do the same thing as the qemu-x86_64 command, except (a) rather than being a 4mb binary, Blink only has a ~156kb footprint; and (b) Blink goes 2x faster than Qemu on some benchmarks such as emulating GCC. The tradeoff is Blink doesn't have as many features as Qemu.Может в этом (The tradeoff is Blink doesn't have as many features as Qemu.) и есть причина почему у этого транслятора footprint только 156Кб?
Туда бы wine завернуть, чтобы можно было сразу виндовый exeшник на любой системе запускать.
Хорошо что мои проги компилятся под все платформы
Прикольно читать большинство коментариев, что типа это не нужно.
Просто показывает насколько расходится ситуация с западными странами, где все сидят на M1 уже.
Да всё нормально ребята, успокойтесь! А то ведь все станут учёными и у всех будут только лучшие компы, и счастье придёт всем, и бабушкам, и дедушкам, детям и другим...
Глядя на профиль автора в github я уж было подумал, что это такая яркая и талантливая девушка в IT: https://github.com/jartНо нет, чудес не бывает:
https://en.wikipedia.org/wiki/Justine_Tunney#Personal_lifeНо к коду это замечание отношения не имеет, код и вправду хорош.
об этом давно уже было написано
https://www.opennet.me/opennews/art.shtml?num=50763
Два раза быстрее? Но никто не вспоминает про Exagear на ARM, он быстрее QEMU в 4.5 раза