Steven,
Finally, if we have time, I'd like to discuss cooperation on IDL files and MSRPC interfaces.
Yes I would like to discuss this as well. Eirc Kohl has made quite a lot of changes to WIDL for ReactOS to support our MSRPC and PLug and Pray implementation and I would like to see these changes merged back in for Wine and Samba so we can adopt a common IDL compiler.
My take on the way we could cooperate on IDL is that the most effective route is by sharing IDL files, and sharing knowledge. I think that sharing the actual IDL compiler is much more problematic technically.
The reason for this is that Wine really needs RPC/IDL support with compatibility at the object code level, so that existing Win32 code that calls the low level marshalling APIs continues to work. This puts a strong restriction on the approach your compiler needs to take, including needing to use the "format string" table based approach. Please correct me if I am wrong about this.
The Samba project doesn't need object code compatibility, we need only wire compatibility. While we could implement wire compatibility via object code compatibility, it might significantly restrict some of the more interesting things we are doing with IDL at the moment. We have taken the notion of IDL for RPC interfaces and expanded it to be used for all sorts of regular marshalling/unmarshalling tasks, including NBT (and WINS), DGRAM packets and even for on-disk format of xattrs for extended NTFS filesystem attributes.
To do this, we have extended IDL in our compiler in quite a number of ways, allowing for constructs that MIDL does not handle. We would be very reluctant to give up those extensions as they have proved to be very valuable, and it might prove difficult to keep those extensions in some cases if we adopted the table based IDL compiler approach.
While I am certainly open to discussing ways in which this might change, I suspect that for the moment the needs of our two compilers will keep them separate.
What we can do, however, is cooperate on the IDL files themselves and on test suites and knowledge about how the associated machinery works (such as the many RPC auth, sign and seal methods).
To this end we have put the following note in our IDL directory:
-------------------------------------------------------------------- The IDL files in this directory are made available by the Samba Team under the following license:
Permission to use, copy, modify, and distribute these interface definitions for any purpose is hereby granted without fee.
This work is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --------------------------------------------------------------------
It is our hope that this is sufficient for the Wine developers to be happy about using our IDL files in Wine, or at least grabbing any bits that are useful. Our collection of IDL files is not complete, but it is growing and already includes quite a lot of useful stuff. We also have quite extensive test suites for most of the IDL we have written.
Another thing we should discuss is the methods by which we develop new IDL files that are compatible with the interfaces that Microsoft uses in MSRPC. We have become quite proficient in that area, and it might be useful to have some discussions with some interested Wine developers on how that is done. I'm sure we can learn things from each other in that area.
Cheers, Tridge