vak: (Default)
[personal profile] vak
Все знают утилиту Wine, которая запускает бинарные программы Windows на Линуксе. Интеловский бинарный код выполняется как родной, а обращения к операционной системе (системные вызовы) перехватываются и обрабатываются. То же самое делает noah, позволяя выполнять линуксные бинарники на MacOS.

На картинке показано, как под noah стартует линуксный bash, а из него запускаются линуксные приложения xeyes, xclock, xfwrite и компилятор gcc.



Утилита глюкавая, и если вызвана неправильно, падает со странными ошибками. Но её исходник может служить источником ценной информации, как правильно работать с маковским гипервизором. К примеру, если вы соберёте noah из исходников на последней версии MacOS, программа будет падать с ошибкой:
!!PANIC!!
perror is "Undefined error: 0" if it is valid
could not create the vm: error code fae94007
Это означает, что нет прав доступа к гипервизору. Надо разрешить доступ командой:
codesign -s - --entitlements app.entitlements --force noah
При этом в файле app.entitlements должно находиться следующее содержимое:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.hypervisor</key>
    <true/>
</dict>
</plist>
Большой минус noah: она понимает только бинарники 64-битного линукса для архитектуры x86_64. Запустить бинарники i386 не удаётся.

Date: 2022-08-05 00:27 (UTC)
lxe: (Default)
From: [personal profile] lxe
Нууу, 10.12 и выше…

Date: 2022-08-05 01:23 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
WINE ведь не перехватывает системные вызовы (те что вызывают код в режиме ядра).
Она реализует библиотеки Win32, которые в свою очередь делают системные вызовы (так называемый NTAPI).

AFAIK если виндовая программа напрямую обращается к NTAPI, то под WINE не заработает.
Edited Date: 2022-08-05 01:24 (UTC)

Date: 2022-08-05 03:32 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Интересно, зачем там гипервизор. Я думал, что это всё делается с помощью dummy-процесса, в котором память подменяется на бинарник, который нужно выполнять, и "отладчика", который знай себе получает прерывания типа SIGILL при системных вызовах, и отрабатывает их от имени процесса.

Date: 2022-08-05 06:09 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
В режимах отладки есть и перехват системных вызовов. strace им пользуется.

Date: 2022-08-05 07:30 (UTC)
euthanasepam: Ла-ла-ла-ла! Ла-ла-ла-ла! (Default)
From: [personal profile] euthanasepam
ЕМНИП, на маке были свои нативные X11. Куда они делись?


P. S.

Пишут, что есть:

en.wikipedia.org/wiki/XQuartz

www.xquartz.org

Edited Date: 2022-08-05 07:32 (UTC)

Date: 2022-08-05 19:00 (UTC)
From: [personal profile] ivanrubilo
Фиг знает, никогда Wine не любил - всегда что-то или криво, или шрифты уехавшие или просто крешится приложение, да ещё и кучу мусора создаёт. Лучше уж по старинке в qemu или чём-то таком, откуда не расползётся. Ну либо линупс-бокс или хз там ssh -X на край.