WineHQ

World Wine News

All the news that fits, we print.

24 Jan 2000 00:00:00 -0800
by Eric Pouech
Issue: 27

XML source
More Issues...

This is the twenty seventh release of the Wine's kernel cousin publication. Its main goal is to distribute widely what's going on around Wine (the Un*x Windows emulator).

WineHQ is still having some trouble after the upgrade 2 weeks ago. Most of the servers are up and running, even the NNTP got back its posted articles; however the NNTP server is no longer updated. This is worked upon, but, unfortunately, not yet done.

This week, 117 posts consumed 514 K. There were 39 different contributors. 27 (69%) posted more than once. 25 (64%) posted last week too.

The top 5 posters of the week were:

  1. 15 posts in 38K by Alexandre Julliard
  2. 12 posts in 112K by Ulrich Weigand
  3. 8 posts in 16K by Bertho Stultiens
  4. 7 posts in 14K by Juergen Schmied
  5. 7 posts in 15K by Ove Kaaven

Wine license change 19 Jan 2000 00:00:00 -0800 Archive

After the discussions held early December of last year regarding changing Wine's license, Alexandre Julliard proposed the following changes: Now that the holiday season is over and that the Y2K apocalypse is safely behind us, I'd like to proceed with the license change. The discussion we had a few weeks ago leads me to the conclusions that:
  • most developers do not care much
  • nobody seems opposed to a change
  • there is a consensus that an existing license is better that inventing a new one
  • the X11 license is preferred over the FreeBSD one, because of ambiguity with the different BSD licenses

So I propose that we switch to the X11 license.

I've included a copy of the license below, and I ask all developers (if your name is in the AUTHORS file you are a developer) to please send me a private email stating whether you can accept it or not; even if you don't give a d*mn about the license, please drop me a mail saying just that. Thanks.

PS: the final wording of the copyright line may be a bit different, maybe making reference to the AUTHORS file; we'll probably also include the license text in every source file. But these are implementation details that we can discuss once the license itself is agreed upon.

PPS: I don't need individual agreements from people working on behalf of Corel, since Corel is the copyright holder on their code. I will need an agreement from Corel Corporation itself though.

So, if you're a developer, do drop a note to Alexandre.

As a remainder (and for the layers who may (by mistake ?) read this news letter), here's the proposed license: Copyright (c) 1993-2000 The Wine Project

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Address space separation has started 19 Jan 2000 00:00:00 -0800 Archive

The long awaited work on address space separation has started. This internal enhancement to Wine would provide a separate address space (in Unix term) for every Windows process running under Wine.

Here are a few reasons to put this in place:

  • security: under Windows 9x and NT, a process cannot directly access the memory of another process.
  • runnability: some DLLs do not have relocation records. This is fine when a single process occupies the address space, but is problematic when two different processes try to load at the same address two DLLs (the address being hardwired in each DLL). Only one of the two DLLs can be loaded. This is the source of the (in)famous errors like: FATAL: Need to relocate foo.dll, but no relocation records present (). Try to run that file directly !

Alexandre Julliard sent a first patch (based on his work at CodeWeavers on behalf of Corel) and asked for some further testings. This was only the first step to provide full address space separation. So far, Alexandre's patch provides the following features:
  • the server is now always a separate program, that can accept connections on a Unix socket in /tmp
  • a newly started Wine will connect to an existing server if it can find one running (on a per-user basis)
  • the system heap is shared among all Wine sessions connected to the same server.

This patch does not yet change the behavior with processes started inside an existing Wine session through CreateProcess, so it shouldn't break anything; but please test it anyway...

Hence, this patch doesn't solve the relocation of DLLs issue, but is a first step towards its resolution. The following steps will likely include using another Unix process while handling the CreateProcess API, but also an in details review of all DLLs to see how they behave with regard to separated address spaces ; sending messages across processes has to be addressed as well.

Anyway, Alexandre's patch didn't generate bad reports (only Gérard Patel found a badly behaving application, but which was due to ddeml.dll not properly handling the different address spaces), so this patch is expected to make its way to CVS soon.

Jörg Mayer pointed out some security/denial of services (DoS) issue: Since the socket used for communicating with the wineserver is located in /tmp, under a user's name (in fact his uid), This is broken wrt security/DoS attacks. Creating files in /tmp is a bad idea (tm). The first dos that came to my mind immediately was to create a directory with your uid. So next time you want to run wine, you fail. I'm sure in a more subtle way I could even gain gain control over "your" socket. We already have a $HOME/.wine directory. I think $HOME/.wine/run/ would be a good place for that stuff.

Alexandre agreed that /tmp was a bad place, but he feared that $HOME/ could be located on exotic file systems on which unix sockets are badly handled. The first file system to think of is NFS, but lots of people (Olivier Galibert, Peter Ganten to name a few) reported this was working fine on lots of Unices. However, Michael Veksler reported I have AFS which definitely does not allow sockets/fifos. Nevertheless It was possible to run applications that establish fifos in $HOME/.somename/ by making $HOME/.somename link to /tmp/veksler/somename/.

The morale is: put it in $HOME/.wine/sockets/ and let the user decide if that is a directory or a link to the local file system. Requiring the sysadmin to setup /var/...../user/ or to fight DOS attacks is not very user friendly.

As a conclusion, Alexandre proposed the following solution: Maybe I should create the socket under /tmp with a unique name and store a pointer to it in $HOME.

Merging wine and winelib startup code 18 Jan 2000 00:00:00 -0800 Archive

Ulrich Weigand posted for review (this week has definitively been a review one !) a first try at merging the wine and winelib startup code. The main points are:
  • WineLib apps use a .spec file to define a normal PE header, complete with resources and imports and main entry point (the special LIBRES hack dies; winestub is no longer necessary)
  • the main Wine executable does the same, in effect it becomes itself just a normal WineLib app
  • initialization of the initial thread/process shares much more code with initialization of other threads, to remove special cases and possible differences in 'environment'

In fact, implementing this last point even fixes some bugs in the current WineLib setup:
  • WineLib apps were always marked as 16-bit processes in the PDB and TEB flags settings (influencing e.g. SendMessage() ...)
  • WineLib apps were not executing on the correct thread stack (leading to problems with exception dispatching)
  • the wine debugger now works in WineLib as well

Among the issues, Ulrich noticed with is patch was that some applications from programs/ in the CVS tree no longer link because they were using the "libres hack". This hack was redefining one different resource structure for each supported language; when used in conjonction with Ulrich path, this lead to symbol's name collision. Bertho Stultiens simply proposed to convert those programs resources to the normal resource style (which allows several languages to be supported in a single resource structure). Bertho also announced that he was about to release a new version of wrc which would allow to get rid of gcc preprocessing.

Alexandre Julliard and Ulrich discussed then some technical details linked to the process/thread creation. Alexandre was also not willing to have the first process being a 16 bit one (which Ulrich claimed as required to be able to run native USER), and also to add 16 bit application support for winelib applications.

All Kernel Cousin issues and summaries are copyright their original authors, and distributed under the terms of the
GNU General Public License, version 2.0.