Re: Governance revisited (Wineconf report)

2006-09-21 Thread Dr J A Gow
Andreas Mohr wrote:

> And exactly this information should probably be stated in the wine-patches
> subscription welcome mail.
> 
> "If for some reason the Wine patches you submit fail to get applied,
> then we'd appreciate you taking the effort of submitting your current patch
> as a new item at bugzilla to help us track your work properly until it's
> fully applied."
> 
> Or, for improved visibility, even state this in the footer of every 
> wine-patches mail
> sent (probably bad idea, though).
> 
> Oh, and a DNS alias (or preferrably forwarder) bugzilla.winehq.org might be
> useful (after all it's quite common to have that site name, see e.g.
> bugzilla.kernel.org or bugzilla.mozilla.org etc.).
> 

This would be an excellent idea - it would simply highlight the fact that there
is an alternative route to providing visibility for patches that are not
accepted. I must admit I had always thought of bugzilla as a bug-reporting
mechanism and I hadn't thought of using it in this manner: to open a bug
specifically in order to present your own fix!

John.




Re: Governance revisited (Wineconf report)

2006-09-20 Thread Dr J A Gow
After having followed this thread for some time, I feel that there is an aspect
that is often missed in the debate.

As I see it, it would appear that Wine contributors fall into essentially two
camps. There are those who develop Wine for Wine's sake. This category includes
the core developers, and others who just feel strongly about a particular aspect
in order to improve it and perfect it. These people have time to spend
developing and perfecting their code to meet the necessary high standards for
acceptance and would not see the current system of governance to be an issue.
These are the very people that would attend Wineconf and discuss the issue!

There is another category, however, and I suspect it is the larger of the two.
Some people simply need to quickly fix an aspect of Wine in order simply to get
an application working. These individuals, a category into which I fall, are
driven by a very different motive. To take an example, my (very) small
contribution to Wine was driven by the need to get a commercial ECAD application
running, so that I could continue to use the application as a production tool on
a production system in order to continue to function as an electronics engineer.
In my case, I am also a software developer who believes in feeding useful fixes
back to the community, so I used up some of my valuable free time and got the
patch accepted. It took approximately three times longer to get the patch
accepted than it did to fix the problem in the first place!

I persevered, but I wonder how many other individuals who fall into this
category would do the same? Another contractor driven purely by commercial
pressures may have just got it working and kept the fix in their own tree. Such
people do not have the free time or the inclination to go through the numerous
iterations to get the patch accepted. Free time is a rare commodity these days,
and most software developers will have other projects. These are not the people
who would attend Wineconf and whose opinions can only be solicited through other
means. How many Wine trees are there out there containing useful small fixes
that see the light of day outside of the developers's box, simply because they
do not have the time to struggle through the QA system. A number of these
patches could be being lost to the community.

How to capture these 'lost' contributions is a difficult issue. Maybe a
centralized repository for patches could be maintained separate from the main
Wine tree and with a very loose method of acceptance (maybe just ensure that it
is clearly indicated what the patch is for and what version it can be applied
to). This way it would be very easy for a contributor to place a patch somewhere
where it is easily accessed by the community. A developer with more time who is
interested in it may pick it up and clean it up for inclusion in the tree, but
at least the patch is available for others to use, saving re-invention of the 
wheel.

The quality of Wine is important, and a workable QA system is very necessary.
However there should be a mechanism to enable widespread dissemination of
contributions that for various reasons do not merit direct inclusion in the tree
at that time and for which the developer has neither the time nor the
inclination to do battle with the QA system.

Just my thoughts.

John.
Vijay Kiran Kamuju wrote:
> Some kinda patch management system would help. I think like bugzilla.
> 
> On 9/20/06, Jeremy White <[EMAIL PROTECTED]> wrote:
>> >>Wine works fine as-is in my opinion ;)
>> >
>> >
>> > Which you are entitled to, but my opinion happens to differ. 
>> Whether the wine
>> > core source has all the patches, (Which it doesn't - many, but not
>> all) isn't
>> > relevant, it's the process that they go through that I believe could
>> improve.
>>
>> For the record, Governance is something we often spend a chunk of
>> time on at each Wine conference.
>>
>> Brian has written a nice summary of Wineconf on WWN
>> (thanks Brian!), including a reprise of the talk on governance.
>>
>> Being insufferably long winded, and feeling the need to create
>> a complete record, I would add a few things to what Brian wrote.
>>
>> First, I think there was clear and essentially unanimous agreement
>> that the current high standards for quality were a Good Thing (TM),
>> including the Holy Order of Writing Conformance Tests.
>>
>> Second, I think we had fairly clear agreement that so long as
>> he can handle it, it is most efficient to have Alexandre as
>> the sole maintainer.  Obviously, the more help he gets
>> from component maintainers (e.g. Mike/MSI, Rob/COM), the better.
>>
>> Third, I think there was clear agreement that Alexandre is
>> often a Royal Pain In the Ass (RPITA).  He ignores patches,
>> responds tersely, and sometimes delivers the occassional
>> kiss of death:  "I can't tell you what to change,
>> but your patch is wrong."
>>
>> However, we, the assembled 30 or so of the most core Wine
>> developers, could no

OT: General behaviour of the community (from 'Why winetools is utterly useless, once and for all')

2006-03-29 Thread Dr J A Gow
I was interested to read several comments on this list in respect of such 
comments as 'IQ of zero'. Such comments were the final straw in leading me to 
take this action.


A few days ago I sent a comment to the list. Nothing really sinister, just an 
observation and an experience. Before long I had a particularly vicious and vile 
diatribe sent in reply to my comment - to my private email address. I have 
appended the lower headers and the bulk of the message I received at the end of 
this message (trimming the html from the bottom).


I thought long and hard before taking this action. It is not something I would 
normally do, but in this instance I was so incensed at this individual's 
behaviour that I felt that 'naming and shaming' was the only way forward. Not 
even so much as to the fact that he directed his comments to me, but more the 
fact that had I been a new prospective developer, the effect such diatribe would 
have would not in any way be positive. It certainly would taint their perception 
of the open-source community. Furthermore I sincerely doubt that I am the only 
one to experience this behaviour. Others may just suffer in silence.


I have worked with many smaller community projects, on OS/2 and latterly on 
Linux, and never been subjected to this kind of abuse from members of the 
community. I joined this list because I felt that there was something I could 
contribute to Wine, and in the instance it turned out that there was. I did not 
join it to receive unsolicited email of an abusive nature from members of the 
community.


Had he done this by telephone I could have had him prosecuted, at least in the 
UK. But he hides behind a gmail.com address and makes comments I seriously 
suspect he would not have the balls to say to my face.


No, I do not believe that we need a 'net police force'. Common decency between 
individuals, however, is essential. Diversity, discussion, criticism, 
expression, even annoyance are all valuable when driving a project forward. 
Blatant personal abuse is not tolerable. It is not tolerable in society, it 
should not be tolerated in the developer community. The community needs to 
police itself, rather than be policed, and individuals who bring the community 
into disrepute need to be dealt with by the community. That is why I bring this 
into the open.


How to prevent such actions? I do not think it that this is possible in its 
entirety. I can (and have) simply add this individual's address to my blocked 
list. However, I may have been a newcomer to open-source development who would 
not have been so tolerant, and whose opinions of the community may have been 
changed by this action. May I suggest that whoever is responsible for the 
hosting of the mailing list change the configuration so that email addresses are 
not placed in the header? (I am no expert on mailing-list software but it does 
not immediately seem to be impractical.) That way all replies have to go to the 
list and this would prevent such unsolicited email being sent.


This is my last word on this matter. Make of it what you will. I refuse to be 
prevented from contributing to vital projects such as Wine when I can by the 
antics of some depraved individual. It has left a sour taste in my mouth though, 
and like it or not, it does not portray Wine developers in a good light.



---

Disposition-Notification-To: Segin <[EMAIL PROTECTED]>
Date: Fri, 24 Mar 2006 15:01:11 -0500
From: Segin <[EMAIL PROTECTED]>
User-Agent: Mozilla Thunderbird 1.0.7 (X11/20051202)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: Dr J A Gow <[EMAIL PROTECTED]>
Subject: Re: Winetools -> wine doors
References: <[EMAIL PROTECTED]> 
<[EMAIL PROTECTED]>

In-Reply-To: <[EMAIL PROTECTED]>
Content-Type: multipart/alternative;
 boundary="010900050103010506060607"
X-BV-Spam-Score: 0.4 (/)
X-Envelope-From: [EMAIL PROTECTED]
X-Virus-Scanned: by amavisd-new

This is a multi-part message in MIME format.
--010900050103010506060607
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Dr J A Gow wrote:

>
>> I've looked through the winetools code and it is a clusterf*ck of
>> nonsense. It appears to be in the final stages of code rot, however
>
>
> This "clusterf*ck of nonsense" helped me to get a microcontroller
> development suite running under Wine, which otherwise would not install

You're a fucking retard, RTFM! You'd learn you need to use DLLOverrides
in Winecfg.

> natively. After over ten years designing and developing embedded systems,
> there is one thing that stands out.

That you're a dumbfuck?

> Code that is 'nonsense' does not work
> at all.

That's 100% definitive of Winetools.

> Code that works may not

Re: Winetools -> wine doors

2006-03-25 Thread Dr J A Gow

Karl Lattimer wrote:


Fair point that it has been useful to you, it has been useful to me
also. Here's what I see.

 * An over complicated bash script, with way too many difficult to
maintain parts
 * An inflexible application, which can only have new applications added
to it by the maintainer
 * A terrible confusing GUI

My choice of words was strong I admit, but I think this application is
ready to go to silicone heaven. 



Your points are quite true. I was only really pointing out that something
that enables individuals to Get Work Done Quickly (however bad the tool
might be technically) is of considerable value. That, of course, does not
mean that the tool shouldn't be replaced when it starts to suffer from
'bit-rot'. But let's not completely can it until a viable replacement is
available otherwise we could undermine the perceived 'usefulness' of Wine
when it comes to a necessary rush-job.

I should add I don't use Winetools as a matter of course - I used it once
to get me out of a hole, and it did!


What I am proposing and indeed working on is;

 * An appdb integrated application manager
 * A clean UI which fits with gnome HIG
 * A flexible, expandable, small and simple application which is easily
maintained but can do everything winetools does.


This sounds like an excellent idea.



Maybe nostalgia will keep some people using winetools, or trying to fix
something which is broken. Or maybe a couple people could lend a hand
with this and we could have something better ;)

K,









Re: Winetools -> wine doors

2006-03-24 Thread Dr J A Gow



I've looked through the winetools code and it is a clusterf*ck of
nonsense. It appears to be in the final stages of code rot, however


This "clusterf*ck of nonsense" helped me to get a microcontroller
development suite running under Wine, which otherwise would not install
natively. After over ten years designing and developing embedded systems,
there is one thing that stands out. Code that is 'nonsense' does not work
at all. Code that works may not be elegant, it may not be pretty and
you may hate the style, but it _works_ and therefore it is not nonsense.
This code works, is useful and serves a purpose. Just because you don't
like the way it is written does not make it nonsense. Language, please!

John.




Recently created font problem - anyone see similar?

2006-03-02 Thread Dr J A Gow

Hi,

I found that the following patch, committed to CVS on 23/02/06
at 20:33:06 made all my Wine system fonts squashed up and unreadable, which
in turn made a mess of formatting in some dialog boxes. I backed the
patch out from a current tree and the problem went away. Anyone else see
this behaviour? I am wondering what the purpose of this patch is as
the fonts were quite OK before it was committed, and now they are
completely unreadable on this system. Any thoughts before I submit a
patch to put this back the way it was?

John.

The offending patch:

Module: wine
Branch: refs/heads/master
Commit: 69a23a608eea59624b2f37ab424e0f42b3da5baf
URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=69a23a608eea59624b2f37ab424e0f42b3da5baf

Author: Dmitry Timoshkov 
Date:   Thu Feb 23 20:33:06 2006 +0800

gdi: Use "MS Sans Serif" as default sans serif font, not Arial.

---

 dlls/gdi/freetype.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/dlls/gdi/freetype.c b/dlls/gdi/freetype.c
index ad0d6eb..51e92b8 100644
--- a/dlls/gdi/freetype.c
+++ b/dlls/gdi/freetype.c
@@ -284,10 +284,10 @@ static struct list font_list = LIST_INIT

 static const WCHAR defSerif[] = {'T','i','m','e','s',' ','N','e','w',' ',
   'R','o','m','a','n','\0'};
-static const WCHAR defSans[] = {'A','r','i','a','l','\0'};
+static const WCHAR defSans[] = {'M','S',' ','S','a','n','s',' 
','S','e','r','i','f','\0'};
 static const WCHAR defFixed[] = {'C','o','u','r','i','e','r',' 
','N','e','w','\0'};

-static const WCHAR defSystem[] = {'A','r','i','a','l','\0'};
+static const WCHAR defSystem[] = {'S','y','s','t','e','m','\0'};
 static const WCHAR SystemW[] = {'S','y','s','t','e','m','\0'};
 static const WCHAR MSSansSerifW[] = {'M','S',' ','S','a','n','s',' ',
   'S','e','r','i','f','\0'};




Re: Patch: fix for bug #4436 with associated fixes for stream reference counting

2006-02-20 Thread Dr J A Gow

Thanks for the comments. Patch now resubmitted as two chunks as suggested.

John.

Mike McCormack wrote:


Dr J A Gow wrote:

FROM:   Dr J A Gow
PATCH:  Provides fix for bug 4436, some reference counting fixes, and
now the IStorage correctly handles the following:
  - Stream opening when storage was opened in transacted mode
  - Stream methods called after parent object has been closed
correctly return STG_E_REVERTED
  - Adds conformance test for stream opening in transacted
mode


Looks great, however we usually try to keep seperate fixes seperate so 
that regression testing is easier, and to reduce the size and complexity 
of each patch.


If you could split these two patches into one for the transacted 
storage/stream permissions problem, and one for the reference counting 
problem I'm think they'll be committed without further trouble.


thanks,

Mike






Re: Regression problems in Easy-PC - UPDATE: Have conformance test that triggers reference counting bug in ole32.dll

2006-02-08 Thread Dr J A Gow

Dr J A Gow wrote:



It is as I thought that there is some issue with the object destructor 
for the storage object being called and not actually releasing the 
object. I have attached the complete patch to the tests for storage32 to 


I have just had another thought on this and wonder if anyone could 
confirm it: Shouldn't destruction of the parent IStorage object 
automatically destroy all IStream objects opened within it? This seems 
to be the way Windows works as far as I can tell so far. Wine does not 
do this, requiring all child IStreams to be closed before the final call 
to the destructor of IStorage will actually release the memory (and 
file) associated with it. Any ideas?


John.




Re: Regression problems in Easy-PC - UPDATE: Have conformance test that triggers reference counting bug in ole32.dll

2006-02-08 Thread Dr J A Gow

Hello All,

I wrote this some time ago:

Dr J A Gow wrote:

Hello All,

I have some regression problems relating to Wine in a commercial ECAD 
app 'Easy-PC' version 9.0, available from http://www.numberone.com




Since then I have been doing some more digging into the problem and have 
come up with a test that triggers the bugs: i.e. passes on Windows and 
fails on Wine (latest CVS). Looking at the failure mode I feel that it 
has the potential to break a _lot_ of apps.


It is as I thought that there is some issue with the object destructor 
for the storage object being called and not actually releasing the 
object. I have attached the complete patch to the tests for storage32 to 
this message if anyone could try it I would be grateful, but I will just 
describe some of the reasoning behind it first.


It seems that the problem is not the grfMode with which the file is 
opened, but a reference counting method used within storage32. A call to 
the destructor of the storage object is not destroying the object - with 
it left open the error appears when a subsequent call to open the 
storage object fails with access issues because the previous one is left 
open. So, I introduced this test that exactly mimics the behaviour of 
the app. To do this, I needed a storage object that contained a stream, 
so I wrote code in the appropriate conformance test module to create one:



r = StgOpenStorage( filename, NULL, STGM_TRANSACTED | STGM_WRITE | 
STGM_SHARE_DENY_WRITE, NULL, 0, &stg);

ok(r==S_OK, "StgOpenStorage failed\n");
if(stg)
{
static const WCHAR stmname[] =  { 
'w','i','n','e','t','e','s','t',0};

IStream *stm = NULL;

r = IStorage_CreateStream( stg, stmname, STGM_WRITE | 
STGM_SHARE_EXCLUSIVE,

   0, 0, &stm );
ok(r == S_OK, "CreateStream should succeed\n");

if(stm) {
r=IStorage_Commit(stg,STGC_DEFAULT);
ok(r==S_OK, "StorageCommit failed\n");

}

// Windows reference counting seems different

r = IStorage_Release(stg);
ok(r == 0, "wrong ref count"); printf("- ref count = %lx\n",r);

if(r) {
r = IStorage_Release(stg);
ok(r == 0, "wrong ref count"); printf(" - ref count = %lx\n",r);
}

}

It was here where I got the surprise! I expected this code to work on 
both Wine and Windows, so the next part of the patch could trigger the 
bug. However I found that on Windows, the first call to IStorage_Release 
returns zero, and the storage object is destroyed. Under Wine however, 
the first call to IStorage_Release returns 1 but does not destroy the 
object - the second call to IStorage_Release returns zero and destroys 
the object. It appears that Windows takes no notice of reference counts 
when the IStorage destructor is called! I only discovered this because 
in the original test code I had two calls to IStorage_Release straight 
after each other without the if(r) test: and although it worked on Wine 
it segfaulted on Windows due to the 'stg' object being destroyed on the 
first call. This proved the difference in behaviour.


Now on to the second part of the test, that attempted to re-open the 
closed storage object, then open the stream within it:




/* Easy-PC test 2 - this looks for the OpenStream mode check. Fails 
under Wine */


r = StgOpenStorage( filename, NULL, 0x00010020, NULL, 0, &stg);
ok(r==S_OK, "StgOpenStorage failed\n");
if(stg)
{
static const WCHAR stmname[] =  { 
'w','i','n','e','t','e','s','t',0};

IStream *stm = NULL;

r = IStorage_OpenStream( stg, stmname, 0, 
STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm );
ok(r == S_OK, "OpenStream should succeed - "); printf("rc from 
OpenStream : %lx\n",r);


r = IStorage_Release(stg);
ok(r == 0, "wrong ref count\n");
}

Again, this works on Windows, but the OpenStream call fails with an 
access denied error on Wine. This is the exact mode of the bug in the app.


Could one of the ole32 developers please contact me: I am happy to work 
with them to resolve this problem as I need this app to work under Wine, 
but not being a Windows programmer I am not fully familiar with the 
storage API. In the meantime I will continue my investigation and see if 
I can fix this directly, but I am sure it will happen sooner if I could 
work with the ole32 developer.


Many thanks for listening. The patch is below, I will submit this for 
inclusion in CVS.


John.


Index: wine/dlls/ole32/tests/storage32.c
==

Re: Regression problems in app - help with debugging?

2006-01-29 Thread Dr J A Gow
Thanks for the advice Dan. I have done this now, and the bug report is 
entered into the database as bug #4436. As I say I am more than happy to 
help the developers debug this, providing someone can work with me in 
respect the operation of this portion of the userland Win32 API with 
which I have very limited experience.


   John.


Dan Kegel wrote:

Smashing analysis!
You might want to repost your note as a bug report at
http://bugs.winehq.org.  Set the 'component' field of the
report to wine-ole, and put 'download' in the 'keyword' field.
This will get the attention of the right folks somewhat more
reliably than a post to wine-devel.
- Dan

--
Wine for Windows ISVs: http://kegel.com/wine/isv

  






Regression problems in app - help with debugging?

2006-01-29 Thread Dr J A Gow

Hello All,

I have some regression problems relating to Wine in a commercial ECAD 
app 'Easy-PC' version 9.0, available from http://www.numberone.com


The application was quite usable on Crossover Office 4.2, with just some 
minor dialog corruption. Alpha versions of Wine available at the same 
time (can not exactly remember which ones) could also run it 
successfully. However, under the latest Wine 0.9.6, Wine CVS and CXO 
5.0.1 it does not work. Note that it does not crash, it errors out 
cleanly with a dialog box message.


I have been debugging the problems in this app for some time now. It is 
a critical app for me as I use it in a production environment, but I do 
not want to pay Microsoft for the privilege of exposing my machine to 
malware. I am thus prepared to help debug Wine to get this application 
running. However, my Windows programming experience is limited to device 
drivers, not apps (although fluent C/C++ systems programming on other 
platforms), I have hit a brick wall, possibly due to my limited 
knowledge of how the Windows API works and I will need some help with this.


If anyone would like to help me debug this app (hope springs eternal!), 
a demo version of the app is available free of charge from the web site 
address above, and this version exhibits the same problems as the full 
version.


Background
-

The system: Dual physical processor (not dual core) Opteron running SuSE 
10.0 x86_64 SMP.

Wine: Latest 0.9.6 release, up to CVS grabbed a week or so ago.

The application installs OK and when run, puts up a GUI as expected. 
However, when you try to create a new PCB or schematic, an error dialog 
box is displayed indicating that the app can not read the technology 
file Default.stf (schematic) or Default.ptf (pcb). This is _not_ a 
permissions problem, all files are actually present and the same install 
will work under CXO 4.2.


I generated and analyzed several hundred MB of logfiles over many days, 
added extra debug statements to the Wine code and analyzed the 
application's operation. The problem actually appears to have two 
causes, and this is what I have come up with so far.


Problem 1
---

Application calls StgOpenStorage with a grfMode flag of 0x10020 
(STGM_TRANSACTED | STGM_SHARE_DENY_WRITE). Immediately afterwards it 
calls StorageBaseImpl_OpenStream with a grfMode of 0x12 
(STGM_SHARE_EXCLUSIVE | STGM_READWRITE). This second call fails with an 
access denied error code, after which the logs show an easily traced 
error handling sequence leading to display of the error dialog mentioned 
above:


0009:Call ole32.StgOpenStorage(59693db0 L"c:\\Program Files\\Number One 
Systems\\Easy-PC\\Technology\\Default.ptf",,00010020,,,5821f850)
 ret=1022e7f0

...
...

trace:storage:StgOpenStorage <-- , IStorage 0x5b3465f8
0009:Ret  ole32.StgOpenStorage() retval= ret=1022e7f0

...
...

trace:storage:StorageBaseImpl_OpenStream (0x5b3465f8, L"\0005FileType", (nil), 
12, 0, 0x5821f848)
fixme:storage:StorageBaseImpl_OpenStream STORAGE ACCESS DENIED - parent 0, this 
2


Note that the last fixme is one I added to find out exactly what was 
going on here. Now, logic would dictate that the grfMode of the 
OpenStream method call is indeed incompatible with that of its parent 
storage object. However,  I would have thought that the application 
coders would most likely have hard-coded the grfMode flags in the 
application. If so, it would seem that the app is buggy, yet this 
application works on Windows! Either the app is buggy and the Win32 
OLE32 implementation behaves differently, or I am missing something here.


Ok, so with no obvious solution to this problem, I decided to bypass it. 
I modified the storage32.c implementation in the following way to bypass 
the grfMode check:


 parent_grfMode = STGM_ACCESS_MODE( This->ancestorStorage->base.openFlags );
 *if* ( STGM_ACCESS_MODE( grfMode ) > STGM_ACCESS_MODE( parent_grfMode ) )
 {

FIXME("StorageBase_OpenStream called with grfMode mismatch - parent %d, this 
%d\n",
  parent_grfMode,STGM_ACCESS_MODE(grfMode));

   ///res = STG_E_ACCESSDENIED;/
   ///goto end;/
 }


Obviously not a viable fix, but a hack to get it working. After 
implementing this, the OpenStream call succeeded, as did subsequent 
stream access. However, the app _still_ errored out in exactly the same 
manner and at the same time. After more log searching, this led to the 
discovery of the second problem.


Problem 2
---

During its loading and setup, the application repeatedly calls 
StgOpenStorage on the .stf/.ptf files in question, calls OpenStream, 
reads from the stream, and then finally closes the storage. I placed 
tell-tales in useful locations in the file open/close handlers in the 
wineserver, and could clearly see the files being opened and 
subsequently closed. This open/read/close occurs correctly and in 
sequence up to a certain point. At this point in the execution, th