Top
Best
New

Posted by iamnothere 8 hours ago

Wine ported to OpenBSD(marc.info)
454 points | 152 commentspage 2
yass0 3 hours ago|
I am sure this has something to do with all the PS5 jailbreak work that is massively happening recently.
Bluescreenbuddy 7 hours ago||
Good lord this is awesome
CodeCompost 7 hours ago||
That is awesome. I take it I can't run this with nVidia.
ninjin 7 hours ago|
Nvidia support for OpenBSD is not really a thing [1]. With AMD and Intel, you have support for modern hardware in the tree [2,3].

[1]: https://man.openbsd.org/nv

[2]: https://man.openbsd.org/amdgpu

[3]: https://man.openbsd.org/intel

XenophileJKO 6 hours ago||
The irony is that this seems like the perfect kind of problem to say point an Opus 5.5 instance at.

It is verifiable and has a clear exit criteria. Functional and performance parity.

ninjin 6 hours ago||
How is that ironic? If you know how to do this, ensure that the license of the code is compatible [1], and maintain the code, then send the patch to tech@ for review and maybe it gets in.

[1]: https://www.openbsd.org/policy.html

rootnod3 5 hours ago||
Just be sure you understand the code 100% before sending it.
throwaway27448 7 hours ago||
Out of curiosity, how much work/what sorts of openbsd-specific details must be addressed to get such a port working?
coldpie 7 hours ago||
You can download the attachment and take a look at the patches. Wine already supports FreeBSD and macOS, so it's not tooooo crazy hard to add another BSD/Unix to the pile. Looks like there's a few Unix APIs that have drifted, so the patches add some #if OpenBSD style stuff to avoid using some symbols that don't exist on OpenBSD. The gs register stuff is by far the most complex bit. IIRC that register is used for thread-local storage on Windows, but for other purposes on other OS's, so handling access from win32 binaries to the gs register is a big problem when porting to a new OS.

On the whole it looks well written to me, especially with how complex & low-level these areas of Wine are. Good work to the author. I'd encourage them to try upstreaming it if they're interested. Some of it looks a little hacky, which upstream will object to, but maybe they could get some help cleaning it up, which will avoid having to maintain a diff and result in an even better port.

Edit: Oh, looks like they already talked with upstream https://marc.info/?l=openbsd-ports&m=179241414029592 It's not a huge diff to maintain, so maybe that is the better route. Great work either way.

NethIafin 3 hours ago||
There are some basic OpenBSD-isms like ucontext, stack mapping, mmap, fix trap context so rest of the %gs patching logic even knows where to work.

Rest is basically ~~two~~ three main issues 1. %gs/gsbase - we trap on %gs instructions because %gs=0 gsbase=0 so all of them illegally point at page zero. So we take the instruction, decode, turn it into %gs-less instruction, and stow it somewhere else. To do conversion we need a scratch register (now two, thanks MINGW32-GCC, you c*nt), we replace whatever gsbase should've been with our TEB pointer, and gogogo (with restore of the scratch register state {or two}). Old instruction (if wide enough) becomes jmp rel32 (I picked it because it is 5 bytes, and short jump branches are too... short). If it isn't, we are just constantly trap on that so we just create a hash between trap location and stub location. Those cases are thankfully rare.

Just this one patch gives us Notepad, Notepad++, Factorio, and many many other games

2. SIGUSR1. Basically Windows lets threads chat thru their thread API, and Electron apps (I really wanted Eve Online to work) and Chromium apps constantly chat and interrogate each other with that thread API. Wine decided to emulate some of the APIs with unix signals. Now the main issue here is that OpenBSD, does not allow one process to signal a thread in another process. So we catch it with the currently active thread, and reemit it now inside of the process as SIGUSR2. Read on SuspendThread, GetThreadContext, ReadProcessMemory, and why Mojo/Crashpad works how they work, very fun! Makes you really enjoy the security OpenBSD gives you. Another dev is making this code better and handle other SIGnals.

3. ReadProcessMemory / WriteProcessMemory (NtReadVirtualMemory / NtWriteVirtualMemory) - this is also for Electron/Chromium but mostly Steam. We only needed it majorly when we started pushing towards steam working. Steamwebhelper, steam overlay, and steam watching you play and tracking your game time, are completely against OpenBSD's security model. Wine processes are not descendants of wineserver, so wineserver cannot ptrace them unless you enable kern.global_ptrace=1. We were trying to keep kernel as stock as possible so...

2 and 3 are very much together and if you ever seen on windows how chrome looks in the Task Manager and how many chrome processes there are, well now you know my pain, haha

kogasa240p 3 hours ago||
Impressive! Wonderful to see that the BSDs are getting love these days.
ericfrederich 7 hours ago||
My first thought was this must have something to do with the development momentum around the PS5 but that apparently runs FreeBSD not OpenBSD.
imagetic 6 hours ago||
Yes. More of this.
shevy-java 6 hours ago||
Now the BSDs are not so popular compared to Linux, but I think this is great news as more eyes help here. Let's have EVERYTHING from windows portable towards linux. (I struggled with the 32-bit versus 64-bit stuff; this should also be a prime goal for wine to make this a trivial super-easy to solve thing for linux in general. Back then when I ran into this issue, it was not trivial to solve.)
raverbashing 6 hours ago||
I wonder what's the state of 3D/OpenGL support on OpenBSD or if the games run into too many problems here
NethIafin 2 hours ago||
> And one of the great things of having a Wine port is that It just works.|

Todd Howard probably

daneel_w 2 hours ago||
There's been hardware-accelerated OpenGL in OpenBSD for ages.
j45 6 hours ago|
I remember reading once how far away something like this way to work - for all the time that BSD has kept servers and networks safer than other options, it's nice to see things like WINE making it there as well.

Its hard to not think of the possibility that BSD might offer new or different advantages to keeping legacy windows applications safe until there is a willingness to adopt or develop alternatives.

More comments...