<?xml version="1.0" ?>
<kc>

<title>Wine Traffic</title>

<author contact="http://www.theshell.com/~vinn">Brian Vincent</author>
<issue num="290" date="16 Sep 2005 00:00:00 -0800" />
<intro> <p>This is the 290th issue of the Wine Weekly News publication.
Its main goal is to hate the new pipermail web interface. It also serves to inform you of what's going on around Wine. Wine is an open source implementation of the Windows API on top of X and Unix.  Think of it as a Windows compatibility layer.  Wine does not require Microsoft Windows, as it is a completely alternative implementation consisting of 100% Microsoft-free code, but it can optionally use native system DLLs if they are available.   You can find more info at <a href="http://www.winehq.org">www.winehq.org</a></p> </intro>
<stats posts="477" size="966" contrib="127" multiples="85" lastweek="23">

<person posts="29" size="27" who="ivanleo at gmail.com (Ivan Leo Puoti)" />
<person posts="25" size="27" who="julliard at winehq.org (Alexandre Julliard)" />
<person posts="17" size="32" who="rob at codeweavers.com (Robert Shearman)" />
<person posts="15" size="23" who="mike at codeweavers.com (Mike McCormack)" />
<person posts="13" size="36" who="fgouget at free.fr (Francois Gouget)" />
<person posts="15" size="38" who="bobl at optushome.com.au (Robert Lunnon)" />
<person posts="12" size="19" who="saulius2 at ar.fi.lt (Saulius Krasuckas)" />
<person posts="11" size="24" who="jean at bornier.net (Jean Magnan de Bornier)" />
<person posts="11" size="20" who="wine-devel at kievinfo.com (Vitaliy Margolen)" />
<person posts="11" size="14" who="wine.dev at web.de (Detlef Riekenberg)" />
<person posts="11" size="11" who="dmitry at baikal.ru (Dmitry Timoshkov)" />
<person posts="10" size="27" who="oliver_stieber at yahoo.co.uk (Oliver Stieber)" />
<person posts="9" size="14" who="frank.richter at gmail.com (Frank Richter)" />
<person posts="8" size="11" who="jnewman at codeweavers.com (Jeremy Newman)" />
<person posts="7" size="18" who="wine at troy.rollo.name (Troy Rollo)" />
<person posts="7" size="15" who="eric.pouech at wanadoo.fr (Eric Pouech)" />
<person posts="7" size="13" who="stefandoesinger at gmx.at (Stefan D&#246;singer)" />
<person posts="6" size="38" who="lkcl at lkcl.net (Luke Kenneth Casson Leighton)" />
<person posts="6" size="15" who="dank at kegel.com (Dan Kegel)" />
<person posts="6" size="14" who="Alexandre Julliard" />
<person posts="6" size="14" who="wino at piments.com" />
<person posts="6" size="7" who="mh at codeweavers.com (Mike Hearn)" />
<person posts="5" size="18" who="Damjan Jovanovic" />
<person posts="5" size="14" who="Vijay Kiran Kamuju" />
<person posts="5" size="13" who="Frank Richter" />
<person posts="5" size="10" who="dimi at lattica.com (Dimi Paun)" />
<person posts="5" size="9" who="mjung at iss.tu-darmstadt.de (Michael Jung)" />
<person posts="7" size="8" who="meissner at suse.de (Marcus Meissner)" />
<person posts="5" size="6" who="kuba at mareimbrium.org (Kuba Ober)" />
<person posts="5" size="5" who="lionel.ulmer at free.fr (Lionel Ulmer)" />
<person posts="5" size="5" who="phil at newstar.rinet.ru (Phil Krylov)" />
<person posts="5" size="4" who="andi at rhlx01.fht-esslingen.de (Andreas Mohr)" />
<person posts="5" size="4" who="ivg2 at cornell.edu (Ivan Gyurdiev)" />
<person posts="4" size="14" who="Jesse Allen" />
<person posts="4" size="13" who="James Liggett" />
<person posts="4" size="13" who="Mike Hearn" />
<person posts="4" size="11" who="Stefan Leichter" />
<person posts="4" size="5" who="reuben at ugcs.caltech.edu (Walt Ogburn)" />
<person posts="4" size="4" who="twickline at gmail.com (Tom Wickline)" />
<person posts="4" size="4" who="hijinio at yahoo.com (Hiji)" />
<person posts="4" size="3" who="h.davies1 at physics.ox.ac.uk (Huw D M Davies)" />
<person posts="4" size="3" who="p.beutner at gmx.net (Peter Beutner)" />
<person posts="3" size="20" who="dj015 at yahoo.com (Damjan Jovanovic)" />
<person posts="3" size="16" who="=?ISO-8859-1?Q?Alex_Villac=ED=ADs_Lasso?=" />
<person posts="3" size="10" who="Andreas Mohr" />
<person posts="3" size="5" who="jack at itma.pwr.wroc.pl (Jacek Caban)" />
<person posts="3" size="5" who="juan_lang at yahoo.com (Juan Lang)" />
<person posts="3" size="4" who="patrol at sinus.cz (Pavel Troller)" />
<person posts="3" size="4" who="truiken at gmail.com (James Hawkins)" />
<person posts="3" size="4" who="hallo at michael-kaufmann.ch (Michael Kaufmann)" />
<person posts="3" size="4" who="Paul.Vriens at xs4all.nl (Paul Vriens)" />
<person posts="3" size="3" who="stefandoesinger at gmx.at (Stefan D&#246;singer)" />
<person posts="3" size="3" who="Stefan.Leichter at camLine.com (Stefan Leichter)" />
<person posts="3" size="2" who="mozbugbox at yahoo.com.au (JustFillBug)" />
<person posts="2" size="15" who="a_villacis at palosanto.com (=?ISO-8859-1?Q?Alex_Villac=ED=ADs_Lasso?=)" />
<person posts="2" size="6" who="Tony Lambregts" />
<person posts="2" size="6" who="Yuri Kozlov" />
<person posts="2" size="6" who="Dmitry Timoshkov" />
<person posts="2" size="6" who="Vitaliy Margolen" />
<person posts="2" size="5" who="Hans Leidekker" />
<person posts="2" size="5" who="frick at sc-networks.com (Christoph Frick)" />
<person posts="2" size="5" who="Jeremy Newman" />
<person posts="2" size="5" who="gvg at reactos.com (Ge van Geldorp)" />
<person posts="2" size="4" who="Stefan D&#246;singer" />
<person posts="2" size="4" who="Ge van Geldorp" />
<person posts="2" size="4" who="jwhite at codeweavers.com (Jeremy White)" />
<person posts="2" size="4" who="Detlef Riekenberg" />
<person posts="2" size="4" who="Paul Vriens" />
<person posts="2" size="4" who="vberon at mecano.gme.usherb.ca (Vincent B&#233;ron)" />
<person posts="2" size="3" who="kelfe at gmx.de (Karsten Elfenbein)" />
<person posts="2" size="3" who="marcelotduarte at gmail.com (Marcelo Duarte)" />
<person posts="2" size="3" who="steven at codeweavers.com (Steven Edwards)" />
<person posts="2" size="3" who="wine at eternaldusk.com (Evil)" />
<person posts="2" size="3" who="jrliggett at cox.net (James Liggett)" />
<person posts="2" size="3" who="richard at daijobu.co.uk (Richard Cohen)" />
<person posts="2" size="2" who="the3dfxdude at gmail.com (Jesse Allen)" />
<person posts="2" size="2" who="winehacker at gmail.com (Steven Edwards)" />
<person posts="2" size="2" who="etech at jentronics.com (Ron Jensen)" />
<person posts="2" size="2" who="aric at codeweavers.com (Aric Stewart)" />
<person posts="2" size="1" who="dclark at akamail.com (Duane Clark)" />
<person posts="2" size="1" who="ulrich.czekalla at utoronto.ca (Ulrich Czekalla)" />
<person posts="2" size="1" who="xerox_xerox2000 at yahoo.co.uk (Robbert Xerox)" />
<person posts="2" size="1" who="lav at etersoft.ru (Vitaly Lipatov)" />
<person posts="1" size="19" who="davidjohnson.johnson at gmail.com (David Johnson)" />
<person posts="1" size="4" who="(peter)" />
<person posts="1" size="4" who="Robert Reif" />
<person posts="1" size="3" who="Paul Millar" />
<person posts="1" size="3" who="abartlet at samba.org (Andrew Bartlett)" />
<person posts="1" size="3" who="Evgeny F" />
<person posts="1" size="3" who="Duane Clark" />
<person posts="1" size="3" who="Belxjander Serechai" />
<person posts="1" size="3" who="Michael Jung" />
<person posts="1" size="3" who="sol at 7ka.mipt.ru (Katerina Nizhnik)" />
<person posts="1" size="3" who="Stefan D&#246;singer" />
<person posts="1" size="2" who="troy at rollo.com (Troy Rollo)" />
<person posts="1" size="2" who="James Hawkins" />
<person posts="1" size="2" who="Robbert Xerox" />
<person posts="1" size="2" who="Jonathan Ernst" />
<person posts="1" size="2" who="Vitaly Lipatov" />
<person posts="1" size="2" who="Jacek Caban" />
<person posts="1" size="2" who="Stefan =?utf-8?q?D=C3=B6singer?=" />
<person posts="1" size="2" who="Ann &amp; Jason Edmeades" />
<person posts="1" size="2" who="mstefani at redhat.de (Michael Stefaniuc)" />
<person posts="1" size="2" who="dtremenak at gmail.com (Daniel Remenak)" />
<person posts="1" size="2" who="Jonathan at ErnstFamily.ch (Jonathan Ernst)" />
<person posts="1" size="1" who="Phil Krylov" />
<person posts="1" size="1" who="peter at piments.com" />
<person posts="1" size="1" who="kennedto at us.ibm.com (Tom Kennedy)" />
<person posts="1" size="1" who="ron at jentronics.com (Ron Jensen)" />
<person posts="1" size="1" who="anssi.hannula at mbnet.fi (Anssi Hannula)" />
<person posts="1" size="1" who="huw at codeweavers.com (Huw Davies)" />
<person posts="1" size="1" who="fgouget at codeweavers.com (Francois Gouget)" />
<person posts="1" size="1" who="rob at codeweavers.com (Rob Shearman)" />
<person posts="1" size="1" who="lxtanner at yahoo.co.uk (Alex Tanner)" />
<person posts="1" size="1" who="daniel.skorka at stud.uni-karlsruhe.de (Daniel)" />
<person posts="1" size="1" who="reif at earthlink.net (Robert Reif)" />
<person posts="1" size="1" who="bon at elektron.ikp.physik.tu-darmstadt.de (Uwe Bonnes)" />
<person posts="1" size="0" who="xnavara at volny.cz (Filip Navara)" />
<person posts="1" size="0" who="timschmidt at gmail.com (Tim Schmidt)" />
<person posts="1" size="0" who="pivo at pobox.sk (ivan =?iso-8859-2?Q?vadovi=E8?=)" />
<person posts="1" size="0" who="brian.vincent at gmail.com (Brian Vincent)" />
<person posts="1" size="0" who="cmorgan at alum.wpi.edu (Chris Morgan)" />
<person posts="1" size="0" who="titan.costa at wanadoo.fr (Christian Costa)" />
<person posts="1" size="0" who="pgr at arcelectronicsinc.com (paul)" />

</stats>
<section 
	title="News: We're Back, To Do List Update"
	subject="News"
	archive="http://www.winehq.com/site/todo_lists"
	posts="2"
>
<topic>News</topic>
<mention>News</mention>

<p>
We're back this week after taking a few weeks off.  Things have been
pretty hectic here and something had to give.  In addition, 
the new Pipermail archives make building the section headings
a complete pain in the ass.  Since it changes the way I've gotten used to
putting issues together, I'm not really sure what the publishing schedule
of WWN will be going forward.  It's added enough overhead and extra time
to make things really frustrating.  If you currently have, or would be
willing to set up, Hypermail archives of wine-devel you'd be my best
friend forever and ever.  
</p><p>
I figured now might be a good time to look at where Wine's at and
what's going to happen in the near future.  You might remember that
Alexandre set a deadline of September 30th for a beta release of 
Wine.  Well, I sent Alexandre an email last week to see if things
were on schedule.  Apparently Alexandre is pretty busy right now 
and that deadline is going to slip by a few weeks.  Interestingly,
there's some large features being worked on (partly covered below),
so there's a chance we might be able to sneak a few extra features in.</p>
<p>We also have the Wine 
<a href="http://www.winehq.com/site/todo_lists">To Do list</a> and we 
haven't looked at it in a while.  The last time we looked at it we
had green (completed projects) beating red (unstarted projects) 36
to 8.  We also had 27 projects in progress.  Here's the current standings:
<ul>
<li>Green (completed): 50</li>
<li>Yellow (in progress): 15</li>
<li>Red (not started): 7</li>
</ul>

</p><p>Some of the items that haven't been started aren't critical for
a 0.9 release and a few could even be seen as only being nice to have.
So overall, things are looking good.  </p>
</section>
<section 
	title="Device Drivers Still Suck"
	subject="Need ideas about ntoskrnl"
	archive="http://www.winehq.com/pipermail/wine-devel/2005-September/039764.html"
	posts="31"
>
<topic>Architecture</topic>
<mention>Microsoft</mention>

<p>Device drivers have always been a hot topic with Wine.  The idea
of some how running Windows device drivers with Wine comes up every
few months.  In recent years, some of the discussion has actually
gotten pretty serious and some of the ideas have actually seemed
somewhat plausible.  For instance,
<a href="http://www.jankratochvil.net/project/captive/">CaptiveNTFS</a>
actually led to a real, working implementation of getting 
Microsoft's ntfs.sys to operate under Linux and let NTFS filesystems
work under Linux.  As you can imagine, these kind of things are <i>hard.</i>  
</p>

<p>Device drivers have been popping up more and more on wine-devel,
especially in the context of things like the Safedisc(tm) (evil)
copy protection driver.  Now, it's not just enough to fake a
device driver into loading; you also have to make it usable by
the standard Win32 API.  Vitaliy Margolen asked this week:</p>
<quote who="Vitaliy Margolen"><p>
We need ntoskrnl to run some subset of drivers on wine. Notably cd protection
drivers. They are not a hardware drivers, but a means to access something that
is not accessible from user space. So in a sense ntoskrnl is just a process to
run those drivers in, and send/receive requests to/from those drivers.
</p><p>
You need to keep in mind that this is a kernel level, so some things will not
work, and some things have to work that normally do not in the user space. Also
ntoskrnl for windows _is_ what wineserver for wine.
</p><p>
User space programs talk to these drivers in the following way:
1. At the start up, driver creates symbolic link in "\DosDevices\something".
2. Program calls CreateFile("\\.\something",..) to get a handle to the device.
3. Uses ReadFile/WriteFile/DeviceIoControl on that handle. (For now we need only
  DeviceIoControl. Read/Write could be added later.)
</p><p>
Here is a list of the most pressing problem and the way to solve them.
</p><p>
Any ideas and comments will be greatly appreciated, Vitaliy.
</p><p>
Problems:
<ol>
<li> Open handle to a device - NtCreateFile.</li>
<li> Call DeviceIoControl on a device. (This also includes (1) since we need to
  know that this is not a cdrom, vxd or something else.)</li>
<li> Resolve user space handle to the DEVICE_OBJECT. (Assuming that we don't 
  call ntoskrnl through wineserver).</li></ol>
</p><p>
Solutions for (1):
<ul>
1.1. Use a hack to determine that passed name is a device name. (Device names
    don't have colon in them).<br />
1.2. Check against all possible names other then device names. (A:..Z:, 
     etc.)<br />
1.3. Try it last if all else fails. (since name spaces don't intersect this
    should work.)<br />
1.4. Use object manager to lookup the name to find out what is it. (Unless we
    open all handles using this method it will add one extra wineserver 
    call.)<br /></ul>
</p><p>
Solutions for (2):
<ul>
<li>ntdll->ntoskrnl
<ul>
2.1. Use named pipe to communicate with ntoskrnl process. Pass commands over the
    pipe in internal format.<br />
2.2. Use UNIX IPC to talk to ntoskrnl. (pipe, socket, etc.)
</ul></li>
<li>ntdll->wineserver->ntoskrnl
<ul>
2.3. Call wineserver which will call ntoskrnl using 2.1. or 2.2.<br />
2.4. Call wineserver which will call ntoskrnl using proper IoXXX functions from
    ntoskrnl to create an IRP. ntoskrnl will process them and notify wineserver
    when call is complete.
    (This is the most complicated and closer represents what windows does.
    There are still a problem communicating to ntoskrnl. It is probably the
    way to go in the future. But that will require number of things implemented
    which are not trivial.)<br />
</ul></li></ul>
</p><p>
Solutions for (3):<br />
MSDN quote: "Note that handles are not used for accessing device objects or
driver objects."
<ul>

<li>3.1. Use wineserver to resolve handle to some internal identifier and pass 
    it to ntoskrnl.</li>
<li>3.2. Pass handle and calling process id (pid, global handle, etc.) to 
    ntoskrnl.
    ntoskrnl will call wineserver to resolve handle to internal id. (This
    handle will have to be either cached, or it will have to be created for
    every call.)</li>
<li>3.3. (requires 2.3. or 2.4.) Wineserver will resolve handle and pass 
    internal id
    to ntoskrnl. (Unless we want wineserver do much more than that.) </li>
</ul>
</p></quote>

<p>Mike McCormack felt the solution was even more complicated:</p>
<quote who="Mike McCormack"><p>

I think that the only way to make device drivers work properly is to
eliminate wineserver completely, and make it what it really wants to be,
which is a user mode implementation of ntoskrnl, something like User
Mode Linux.
</p><p>
That would require being able to write to a process's memory from the
ntoskrnl, which is what your really need to implement ReadFile and
WriteFile so device driver can work properly.
</p><p>
That project is really beyond the scope of Wine... but an interesting
one none the less :)</p></quote>

<p>Peter Beutner wanted to know about one of the methods Vitaliy had
mentioned,
<quote who="Peter Beutner">


Why implement ntoskrnl as a seperate process plus inventing a new IPC
protocol to talk to it? As you said: "ntoskrnl for windows _is_ what
wineserver for wine.". So why not implement the needed ntoskrnl stuff
into wineserver?</quote></p>


<p>Ivan Leo Puoti (who's recently dealt with this concerning the
large ntoskrnl patch he put together) answered, 
<quote who="Ivan Leo Puoti">

Great idea, but Alexandre doesn't want drivers running in wineserver.

</quote></p>

<p>Peter wanted to know the underlying reason and Alexandre replied,
<quote who="Alexandre Julliard">


Stability is the obvious reason. And also of course the fact that we
have most of the code we need in ntdll already and none of it in
wineserver.</quote></p>

<p>Marcus Meissner pointed out another reason why drivers loaded
via the wineserver won't work,
<quote who="Marcus Meissner">
This ntoskrnl is meant to load binary windows drivers. It will never
live in the wineserver due to this reason </quote></p>

<p>Rob Shearman expanded on that and also answered a question about 
why Wine loading drivers would be more unstable than on Windows,
<quote who="Rob Shearman">
Except that Windows doesn't have missing functions or functions that
aren't quite completely implemented. As Alexandre says, there is a ton
of stuff that would have to be duplicated in order to be able to load
Windows drivers in the wineserver. For example, PE loader, virtual
memory, exceptions / signal handling and threading. Also note that the
wineserver is single threaded (and it would be a big task to make it
thread-safe) and that whenever you are calling driver code then all Wine
apps are blocked.</quote></p>

<p>There was more discussion about why ntoskrnl needed to talk to different
Windows processes and such.  Vitaliy then summarized the discussion and
asked for more ideas:</p>
<quote who="Vitaliy Margolen"><p>
First let me thank everyone helping me and Ivan to get ntoskrnl moving
forward.
</p><p>
Summary of all the ideas and requirements:
<ol>
<li> wineserver should not be used to run drivers (absence of required
   functionality, single threaded, stability issues)</li>
<li> ntoskrnl should be used to run drivers only and link to ntdll and not the
   other way around. Unless we implement int 0x2e handling and replace
   wineserver with ntoskrnl. (this is wine not reactos, ntdll already has all
   the required functionality)</li>
<li> Drivers can not be ran in a process that requires them (drivers we are
   concerned
   about keep information that is shared between different processes, drivers
   require their own environment that is different from a user process
   environment, ntdll has no means nor should it have them to run a driver)</li>
</ol>
</p><p>And that's it.
</p><p>
This validates original design by Ivan Leo Puoti for ntoskrnl. Now, there are
still unanswered questions:
<ol>
<li> How to talk to ntoskrnl (directly from ntdll or through wineserver).</li>
<li> How to get information required for ntoskrnl from wineserver.</li>
<li> How to identify this is a device operation and not a file/named pipe/mail
   slot, etc.</li></ol>
</p><p>
I know folks you have more ideas, keep them coming.
</p></quote>

<p>A few more ideas were discussed, but the architecture Vitaliy described
seemed to be the consensus.  </p>

</section>
<section 
	title="Wine's Development Model"
	subject="Suggestions for improvement of the emulator"
	archive="http://www.winehq.com/hypermail/wine-devel/2005-September/039745.html"
	posts="52"
>
<topic>Project Management</topic>
<mention>CodeWeavers</mention>
<mention>Alexandre Julliard</mention>
<mention>Jeremy Newman</mention>
<mention>Marcus Meissner</mention>

<p>One topic that comes up from time to time is Wine's organization.
Open source projects have developed many different methods for getting
code from a patch into the actual codebase.  In Wine's case, Alexandre
Julliard reviews and commits each patch himself.  That's a pretty
difficult model to pull off, especially when it comes to reviewing the
number of patches that go into Wine.  </p>
<p>Each year at WineConf we've discussed whether that model works or
not.  In fact, it's usually one of the first topics that gets addressed.
Each year we've decided that the present model is working.  Alexandre
is comfortable handling the amount of patches coming in and everyone
else thinks his judgement is correct.  In the event a patch doesn't end up
in CVS, Alexandre has said he has a 
not-quite-sure bin of patches where he keeps a running list of patches
that he's unsure of.  Sometimes they just need to be reworked slightly
to get in, other times they're so large it takes a while to review them.
It's not uncommon for a patch to end up there with no response.  If
it doesn't get committed, he suggests contacting him a few days after a 
patch hits wine-patches to find out why.  </p>
<p>Now, one thing not addressed at WineConf is new developers.  Figuring out
that process may be quite frustrating for new developers and we
don't really hear about it at WineConf since we don't have many new
developers there.  A few weeks ago there was a discussion that started
out as someone that seemed to think there were tons of forks of Wine,
meandered into car analogies, and ended up with a long discussion of
the Wine management structure.  It seems to point to a very real 
communication problem.  At the end of the thread it appeared a few things
could be done to help the process, however it doesn't appear anyone will
step up to work on it.  
real solutions were offered. </p>
<p>Troy Rollo started the discussion with:</p>
<quote who="Troy Rollo"><p>
I should preface this by saying that I don't mean any criticism or offence by 
this.  You asked the question and the following reflects my observations of 
current limits to the development model and what would have to be changed to 
improve scalability. That doesn't mean the model has not served well thus far 
or with the available pool of developers to date.
</p><p>
Having to pipe all the changes through one person limits scalability. Until 
recently the facilities didn't even exist for supporting the maximum 
scalability using that model (distributed branching), and even though they 
exist now few people are using them and they are not integrated into the 
central commit process.
</p><p>
Even as things are now there is a disincentive to new developers. Some 
developers don't bother submitting patches because they feel it's too much 
work to get them accepted, and sometimes the patch doesn't get written at all 
because there is not enough certainty that it will be accepted. Before you 
suggest that this is speculative, I have one developer here who has made 
patches to fix Wine bugs experienced at home and not submitted them for that 
exact reason. You can try getting guidance on what is likely to be accepted, 
but again you run into a bandwidth problem with Alexandre - one person cannot 
effectively give guidance to everybody who needs it, and such guidance as he 
is able to give doesn't always help that much. The process requires that 
developers risk their work amounting to nothing because it won't be accepted. 
How many times have you seen people say that "Alexandre doesn't always know 
what he wants, but he knows what he doesn't want"?. That perception is partly 
due to the fact that it is impossible for one person to take the time to 
really understand what is wanted for every area of Wine that is being worked 
on at any one time (humans are linear, it limits them).
</p><p>
I suspect the current model is either at or near its limits. It would 
certainly not cope with a significant number of commercial outfits putting in 
a serious level of contribution, nor does it encourage them to make the 
attempt.
</p><p>
To scale better you would need to divide the project into different areas of 
responsibility and have multiple committers. You could have overall 
guidelines, but you'd need to be willing to trust the managers of each area 
to make final decisions in that area - even so far as to let them make 
mistakes and let them learn from those mistakes. Almost every subdirectory of 
"dlls" could in principle be a separate area of responsibility with a 
separate group of committers, although it might be more convenient to have 
more-or-less related subdirectories under the umbrella of a single group. 
Each group responsible for an area would need to be prepared to give advice 
to people working on some patch in that area that if followed would make it 
virtually certain that the patch would be accepted.
</p><p>
A supporting facility you would probably need would likely include either 
separate mailing lists for each sub-project (things get lost in wine-devel 
<i>now</i> with consolidated read-only lists for people who want a convenient 
way of watching all of the discussions or a shift to an NNTP heirarchy with 
mailing gateways.
</p><p>
These structures are nothing new - most of the really big projects work this 
way - look at Gnome, KDE, and for the insane end of the scale, Debian.
</p><p>
Even with the Linux kernel, which is the only project that I am aware of that 
is comparable in size and follows a similar model to Wine, there appears to 
me to be some greater division of responsibility.
</p><p>
This is all relevant, of course, only <i>if</i> significant expansion of the 
pool of developers is a desirable goal.
</p></quote>

<p>Quite a few people immediately replied to point out things that 
they disagreed with.  However, Ivan Leo Puoti agreed with 
"Alexandre knows what he doesn't want" comment,
<quote who="Ivan Leo Puoti">
That's a problem Vitaliy and I now have, ntoskrnl can run kernel mode drivers just fine (Ok, it has 
for months but only recently it's started using real device handles), but Alexandre doesn't like 
some things about it and doesn't have any alternative solutions, so we're sort of stuck with 4100 
lines of working code, but no immediate prospect of getting them committed. Also I've recently 
noticed that very few of the patches being submitted are being committed, mainly because Alexandre 
appears to be *very* busy with some work (mac support maybe?), so dependencies of ntoskrnl that 
could go in now are still pending approval, the result is development isn't as fast as it could be 
because we aren't sure what to do next, have no indication of what really needs to be changed in our 
code, and we have to wait several days to know if what little we have submitted is ok, and when 
you've got loads of patches that depend on each other that is a bit of an issue.
</quote></p>

<p>Bob Lunnon mentioned some his frustrations:</p>
<quote who="Robert Lunnon"><p>

I must disagree,  the LOTM (Lord Of The Manor) governance model may work for 
an small outfit but wine has already outgrown it. I have two or three 
withheld patches which are absolute show stoppers for running wine under 
Solaris. They are withheld despite the fact they work because they were 
refused, yet every second week I am forced to work around some portability 
problem introduced by someone else - not exactly ISO9001 quality assurance.  
This causes problems for both me and the wine project because:
<ol>
<li> wine is NOT as portable as it should be.</li>
<li> I am forced to become the LOTM for wine under Solaris since I am currently 
the only source (I know of)  for Solaris wine.</li></ol>
</p><p>
There must have been half a dozen times where I have decided to abandon the 
wine project due to its governance model, only to be encouraged back to it by 
my customers. These days I submit my patches to comply with the LGPL, and if 
they go in all well and good, if not I no longer care... Is this how 
developers should be thinking about wine ?
</p><p>
It's also important to remember that many developers that contribute 
(Including myself) are volunteers, volunteers are hard to come by, but really 
easy to get rid of. You need a governance model that is not only fair and 
even handed with people, but is SEEN TO BE fair and even handed. This model 
is not that. </p></quote>

<p>Marcus Meissner didn't think changing Wine's development model would
help at all.  He suggested resending patches and asking for feedback.</p>
<p>Bob followed up with another email discussing Wine's governance model.
Among other things, he mentioned:</p>
<quote who="Robert Lunnon"><p>
Now I'm not saying here that Alexandre isn't objective, just that his criteria 
of assessment is not clear to me, and after 2 years doing this I still reckon 
I have about a 50/50 chance of having anything major accepted. If it's not 
clear to me, then it must be positively opaque to someone new. You might say 
that the project is open, but the governance is closed in that the developer 
and user communities have little influence over governance.
</p></quote>

<p>Discussion then turned toward managing patches.  Everyone's concern is
we're losing patches because they don't get committed.   Jeremy White
mentioned it was something that had been thought of in the past:</p>
<quote who="Jeremy White"><p>
We actually have a todo on Jeremy Newman's list to build
a patch management system for wine-devel, for Alexandre.
</p><p>
Our hope was that we could adopt some of the CodeWeavers
systems (we have a ticket system that's pretty slick,
for example).
</p><p>
However, it became clear that the requirements were
fairly substantial (the tight emacs integration became
our first clue :-/), and that project got back burnered.
</p><p>
At the time we were discussing that, though, we didn't
have many volunteer web programmers; maybe we should
revisit that.  Alexandre, would you be interested if
folks other than Jer volunteered to help build such a system?
</p><p>
With that said, I have to ask - what open source projects
are you guys working on that don't suffer from these
problems?  I'm now a successful contributor to the
Linux Kernel (tweaked isofs for Windows CDs) and it
took me 3 years and countless dropped emails, despite
the personal help of Alan Cox and Andrew Morton
before my patch got in (and I have another patch,
a minor bug fix, that I despair will ever see the
light of day).  I had a similar situation
with MythTV (and the #mythtv channel is actively
hostile to anyone mildly clueless), and the list goes on.
</p><p>
Based on my experiences, I would say that Wine is a cut
above, and Alexandre does a very fine job.
</p><p>
On the other hand, I've often thought that the developer
section should have a big FAQ to help explain how
Alexandre works (notably the fact that he uses the
absolute minimum amount of communication required at
any time) *grin*
</p></quote>

<p>That's pretty much where things were left.  It's clear there's a
few people who are unhappy with Wine's development model, but the majority
of Wine's developers seem content.  It's unclear whether the existing
system is preventing new developers from joining, but certainly no one
wants that.  The two items Jeremy identified, a patch management utility
and documentation concerning patch submission tips, didn't receive
any volunteers. </p> 


</section>
<section 
	title="HTML Help"
	subject="HTML Help is functional"
	archive="http://www.winehq.com/hypermail/wine-devel/2005-September/040071.html"
	posts="1"
>
<topic>Web/HTML</topic>
<mention>Microsoft</mention>
<mention>Jacek Caban</mention>

<p>Microsoft and most other Windows software vendors began moving away
from traditional help files years ago.  Most help files are now created
using Compressed HTML files.  They offer significant benefits over 
regular help files and take advantage of capabilities built into 
Internet Explorer's HTML rendering libraries.  As you can imagine, 
short of developing our own web browser, Wine is stuck without HTML
support.  </p><p>

Well, fortunately we are building our own web browser.  Rather,
Jacek Caban is integrating a Gecko engine into Wine and building the
associated interfaces around it.  James Hawkins has been working in
parallel to get HTML Help to work and gave a status update of where
things are at:</p>
<quote who="James Hawkins"><p>

As soon as the last hhctrl patch is committed (embedding in the
correct window), HTML Help will be functional.  That means that you
can open up a chm help file with wine's help viewer, hh.  It requires
IE6 to be installed for the time being, until our shdocvw and mshtml
are up to par.  You'll also need a copy of native itss.dll (it has to
be registered with wine):
<ul><code>
$ regsvr32 itss.dll<br />
$ WINEDLLOVERRIDES=shdocvw,mshtml,urlmon,shlwapi,itss=n wine hh helpfile.chm
</code></ul></p><p>

A few things need to be completed, but not much.  Most noticeably the
toolbar buttons need to be drawn and submitted to wine-patches.  If
you would like to help in that area, send me an email and I'll let you
know how it needs to be done.  The tabs are blank and need filling in.
 Attached is a screenshot of hh in action.  If anyone has any comments
or suggestions, let me know and I'll address those.


</p></quote>

<p>Of course, screenshots are always nice to see and James included
one of <a href="http://www.winehq.org/pipermail/wine-devel/attachments/20050914/d9eea950/hh-0001.jpeg">CHM rendering</a>.</p>

</section>
<section 
	title="DirectX Update"
	subject="DirectX status update...."
	archive="http://www.winehq.com/pipermail/wine-devel/2005-September/039825.html"
	posts="3"
>
<topic>DirectX</topic>
<p>Oliver Stieber dropped a note with a DirectX status update.  You 
might remember that Oliver began working on DirectX 9 about nine months
ago.  He maintained much of that code outside of the Wine tree for a
long time and only began submitting patches a few months ago.  That was
sort of frustrating for a lot of Wine developers, but things have really
progressed.  Oliver has broken his DirectX work into small, contained
patches and Alexandre has committed almost all of them.  Oliver wrote:</p>
<quote who="Oliver Stieber"><p>
I thought it was about time I gave a status update on DirectX9/wined3d, so here goes.
</p><p>
    Short of a couple of bug fixes (one to shaders, and another that causes some games to crash)
and a couple of patches that need resending (support for non-power2 textures in warhammer 40k)
wined3d and d3d9 is functionally as complete as the version on
<a href="http://directxwine.sourceforge.net">http://directxwine.sourceforge.net/</a>,
 that means that as soon as pixel shaders are copied across
from d3d8 it's more or less the end of adding features to wined3d and the start 
of fixing the remaining bugs and getting the performance up to spec.
</p><p>
Anyhow, as soon as I've sent in those patches I'll provide another status 
update with a bit more information about moving d3d8 over to wined3d and the 
improvements that have been made.
</p></quote>
</section>
<section 
	title="Safedisc Begins to Work"
	subject="Safedisc 1 works on wine"
	archive="http://www.winehq.com/hypermail/wine-devel/2005-September/039950.html"
	posts="4"
>
<topic>Status Updates</topic>
<mention>Vitaliy Margolen</mention>
<mention>Brad DeMorrow</mention>
<mention>Tom Wickline</mention>
<mention>cvs</mention>
<mention>Marcus Meissner</mention>
<mention>Laurent Pinchart</mention>

<p>Ivan Leo Puoti announced this week that Safedisc copy protection now
works with Wine.  We've covered this in past issues and the approach
being taken by Wine.  Safedisc loads a special driver in order to operate.
Rather than reverse engineering the driver or bypassing it, Wine "simply"
needs to load it.  Well, that means Wine needs to implement low-level API's
used by the real Windows kernel, ntoskrnl.  Blah, blah, blah.. show us
some screenshots!</p>
<quote who="Ivan Leo Puoti"><p>
Finally we've got safedisc1 running on linux.
Thanks go to Laurent Pinchart, Vitaliy Margolen, Brad DeMorrow, 
Marcus Meissner, and Alexandre for contributing time/code/ideas.
The code is 100% DMCA compliant and hopefully can be cleaned up to be 
good enough for cvs over the coming days and weeks.
Two games have been tested, they both use the same version of safedisc 
(don't ask how we know, we do)
<ul>
<a href="http://www.kievinfo.com/images/wine/HoM3_1.jpg">
http://www.kievinfo.com/images/wine/HoM3_1.jpg</a><br />
<a href="http://www.kievinfo.com/images/wine/safediscworks.jpg"> 
http://www.kievinfo.com/images/wine/safediscworks.jpg</a> </ul>
Oh, and here's an actual in game shot, if you're a fan of the game you'll
 probably notice I'm out of practice.

<ul><a href="http://www003.portalis.it/115/wine/safediscworks2.png">
http://www003.portalis.it/115/wine/safediscworks2.png</a></ul></p></quote>

<p>One problem Ivan has been running into is implementing the code
in a way Alexandre approves of.  See the other thread in this issue
about getting patches into Wine.  </p>

<p>Tom Wickline asked which versions of Safedisc were supported.
Ivan replied,
<quote who="Ivan Leo Puoti">

1.50.20 is the version we used to implement support in wine, so yes it supports
secdrv.sys and dplayerx.dll and the encryption applied to the ICD.</quote></p>

</section>
<section 
	title="WineHQ Server Upgrade"
	subject="Web Server Back Online"
	archive="http://www.winehq.com/pipermail/wine-devel/2005-August/039616.html"
	posts="29"
>
<topic>WineHQ</topic>
<mention>WineHQ</mention>
<mention>Jonathon Wilson</mention>
<mention>cvs</mention>

<p> Jeremy Newman upgraded WineHQ a few weeks ago.  We had some downtime as a
result, but nothing major.  Since there was an ISP change it took a while
for the DNS change to propagate, but even that happened relatively quickly.
</p><p> 
Jeremy announced what had changed:</p>
<quote who="Jeremy Newman"><p>
The webserver is back online. There are still plenty of quirks to fix.
Feel free to bug me here on wine-devel about any issues that crop up.

</p><p>

ChangeLog:
<ul>
<li> moved OS to Debian Sarge</li>
<li> now using - Apache 2.0.54 / PHP 4.3.10</li>
<li> switched from sendmail to Exim4</li>
<li> upgraded mailing lists from mailman 2.0 to 2.1</li>
<li> mailing lists now using pipermail for archiving, 
  note: old links will work as the hypermail archives still exist</li>
</ul></p><p>

I'm still tweaking configs and all so expect the site to be a bit
erratic over the next few days.

</p></quote>

<p>A few issues cropped up, such as cvsup coming online later in the
day, but for the most part the move was seamless.  Jeremy White was
the first with congratulations:</p> 
<quote who="Jeremy White"><p>
Just because no one else has said it yet:
</p><p>
Nice work, Jer!
</p><p>
(Jer is masking all the behind the scenese wrangling
he did with our two ISPs to arrange this, and the
mad scramble to replace a raided drive that
had fried, and the rebuild to Debian.  )
</p><p>
It was darn nice work on his part to get it all essentially
done in a day.
</p></quote>

<p>The change to Pipermail and the way it handles attachments seemed
to cause some issues.  Jeremy worked on the MIME magic and the problems
seemed to go away.  Later, Jonathon Wilson asked if GD2 was on the webserver
and Newman replied it was.  That opens the door for some AppDB improvements
for things like screenshots.</p>
</section>
<section 
	title="SMP Safe?"
	subject="Is Wine SMP-safe yet?"
	archive="http://www.winehq.com/hypermail/wine-devel/2005-September/040079.html"
	posts="2"
>
<p>Is Wine SMP safe?  Well.. it certainly seems like a topic someone would
have brought up if there were issues.  Dan Kegel asked about a bug report:</p>
<quote who="Dan Kegel"><p>
I've seen conflicting reports about whether Wine is safe
to run on SMP systems.
</p><p>
Have the issues described in
<a href="http://www.winehq.org/hypermail/wine-devel/2005/01/0060.html">
http://www.winehq.org/hypermail/wine-devel/2005/01/0060.html</a>
been taken care of?
</p><p>
I just pinged the reporter of the only bug with SMP in the summary,
<a href="http://bugs.winehq.org/show_bug.cgi?id=2708">
http://bugs.winehq.org/show_bug.cgi?id=2708</a>
to see if he can still reproduce it.</p></quote>

<p>Michael Stefaniuc wasn't aware of any issues,
<quote who="Michael Stefaniuc">

I'm running it since 1.5 years on a SMP system (P4, HT enabled and smp
kernel). I don't remember to have run into SMP problems. Or better said
in the problems i tried to debug there wasn't a SMP bug.</quote></p>


</section>
<section 
	title="Wine's MSI - Help Us Break It"
	subject="Looking for bugs in Wine's Microsoft Installer (MSI) implementation"
	archive="http://www.winehq.com/hypermail/wine-devel/2005-September/040041.html"
	posts="2"
>
<topic>MSI</topic>
<mention>Aric Stewart</mention>
<mention>Microsoft</mention>
<mention>Ivan Gyurdiev</mention>

<p>Microsoft Installer really seems to be the problem of last year.  Mike
McCormack and Aric Stewart spent a lot of time figuring out how MSI works
and creating Wine's builtin library.  While much of the framework was
put in place last year, extensive work has been done this year fleshing
out the API.  Like many Microsoft API's, MSI has been overdesigned with
tons of features (in this case, MSI's "Actions") that go unused.  It
seems like most of what the real world uses in MSI now works with Wine.
Mike McCormack asked for people to go out and break Wine's MSI: 
</p><quote who="Mike McCormack"><p>

If anybody is aware of any cases of Wine's Microsoft Installer code not 
working, please log them in Wine's bugzilla (http://bugs.winehq.org/), 
assign them to me, and I will attempt to fix them.
</p><p>
Make sure to set "msi" = "builtin", "*msiexec" = "builtin" when testing 
your installers, and if possible test with the latest Wine CVS.
</p><p>
If the installer is available as a free download, please include a link 
to it.

</p></quote>

<p>Ivan Gyurdiev quickly pointed out <a href="http://bugs.winehq.org/show_bug.cgi?id=2899">bug #2899</a>
which showed MSI problems with Half-Life 2.</p>
</section></kc>
