News: Wine Compiles on BeOS!!:
Monday, September 27, 1999
 

home

welcome

about

the team

the project

join

news

files

contact

Wine

Wine has been successfully compiled on BeOS!

After some hard work by the
team (and special thanks to Patrik Stridvall of the Wine project), we are at the next step in the BeWine project: get BeWine to RUN!

Here is the current state of problems, possible resolutions, and needs of the project; submitted by Patrik Stridvall (edited for clarity by the webmaster):

Primary issues with BeWine

1 [Emulator Only] LDT modification support.

This is critical and can't be worked around. However all i386 OS:es
that I know of have support for this, even SCO 4.2. It is not AFAIK very difficult to implement in the kernel core, so if BeOS really does not support it, we might be able to persuade Be to fix it in some future release or as a patch to a current release.

It might be possible to write a kernel driver that does this; well it is possible to modify them, but the kernel core might have some objections if we just do that. Need I say crash?

2 [Emulator Only] Prevervation of FS/GS registers during context switch and system and library calls.

This is probably a non-issue but it is critical so we need to keep it
in mind. System and library call non-preservation can be worked around
at a runtime cost, but it will take some time to implement.
Non-preservation during context switch is not possible to work around
AFAICS.

3 [Emulator Only] Differences in address space layout between
Windows and BeOS.


In short BeOS kernel space is 0x00000000-0x7fffffff and user space 0x80000000 - 0xffffffff. In Window it is the opposite, well not quite but it wouldn't change the problem very much if it was.

This is critical mainly because of lack of relocation records in many Windows applications.

However this might be fixed if we load the non-relocatable parts offset by 0x80000000 and do runtime relocation when a segmentation fault occurs (when user space tries to access kernel space).

We might even speed this up by doing runtime patching of the code and data. This is a little dangerous since active pointers might be compared with passive ones, but it might be possible under certain circumstances.

3 BeOS lacks sendmsg/recvmsg

Required to pass file descriptors between processes (teams).

This is an entirely internal problem in Wine, no application will care one way or the other, but it doesn't make it a less serious problems.

Fixing it is not that hard, I think, even if it will require writing quite a lot of code. What worries me most is that it must fit in Wine in a way that developers for Wine on Unices that support it will not have to worry about it.

4 BeOS lacks a general purpose select.

This is also an entirely internal problem in Wine, and it is or will only be used once in Wine, in the select loop in the Wine server.

Somebody mentioned that XBeos has the same problem and that they have solved it, so it might not be that hard. I have not looked very much at it.

5 BeOS lacks mmap

This can largely be worked around since BeOS seems to have other
mechanisms for doing similar things. There may be applications
that will not work but I think they will be few. Internally in Wine it is solvable AFAICS.

6 Signal context handling:

We must have the content of CPU registers when the signal occured.

This is solved, I believe, but not yet implemented. Primary remaining issue: Is it safe to assume that the segment registers when the signal occured is the same as the segment registers in the signal handler? I would be suprised if they weren't but that doesn't make it 100% certain.

7 BeOS socket descriptors are not file descriptors

This is connected to No. 4 but in this case I am refering to the implementation of Windows Sockets (Winsock).

This is not a problem with Winsock 1.x, which most applications use, since in Winsock 1.x socket descriptors are not file descriptors either.

But it is a problem with Winsock 2.0; fortunately this might be fixed using the new (in Winsock 2.0) concept service provider, so I don't worry very much about it, it will be some work, but not a fundamental problem, AFAICS.