did you ever try ReactOS and if yes, what
do you think about it.?
Yesterday i had the chance to run my first
QEMU emulated ReactOS and it looks fine
for me, except that it is not that stable and is
missing lots of windows functionality at all.
Sure it is still Alpha state but looks great!
What do you think?
Regards
Kerem
--
-----------------------
Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Microsoft Live Space: http://kerem-g.spaces.live.com/
Latest Open-Source Projects: http://entwicklung.junetz.de
-----------------------
"This reply is provided as is, without warranty express or implied."
"Kerem Gümrükcü" <kare...@hotmail.com> wrote in message
news:ueBLMRuT...@TK2MSFTNGP04.phx.gbl...
First, much of ReactOS uses the GNU ntifs.h which contains code stolen from
the NT4.0 DDK, and possibly more thefts since Mr. Branton the author
solicted a number of people to send him the Microsoft IFS kit when it was
under strict license.
Second, there is an amazing similarity of some routines with the Windows
2000 source that was stolen and went around the web for a while.
Finally, if you read in detail the EULA for the DDK/WDK of recent times, you
will see some potential for more fun with ReactOS.
--
Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Website: http://www.windrvr.com
Blog: http://msmvps.com/blogs/WinDrvr
Remove StopSpam to reply
"Alexander Grigoriev" <al...@earthlink.net> wrote in message
news:OkXaLZuT...@TK2MSFTNGP02.phx.gbl...
Is there really that much of stolen code inside this project?
--
Volodymyr
NG tips:
http://msmvps.com/blogs/v_scherbina/pages/microsoft-newsgroups-tips.aspx
"Kerem Gümrükcü" <kare...@hotmail.com> wrote in message
news:OnCjqruT...@TK2MSFTNGP04.phx.gbl...
The problem is that since there is no "GPL Corporation" there is no way to
sue open source, except go after individuals which is a losing game. This
is why Bo Branten is still out there since the cost of the legal action
would be orders of magnitude more than the payback.
--
Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Website: http://www.windrvr.com
Blog: http://msmvps.com/blogs/WinDrvr
Remove StopSpam to reply
"Kerem Gümrükcü" <kare...@hotmail.com> wrote in message
news:OnCjqruT...@TK2MSFTNGP04.phx.gbl...
do you mean binary-level identical, so that you could
take the image and run it on a windows e.g. 2000
System. The exports must be the same, since
they aim to be binary compatible to windows
systems, in majority to drivers, but are the algo's
the same, the internals bit-to-bit identical to ms
implementations? I mean they cant be 100% the
same, depending on the comilers output, but how
identical are they?
--
Volodymyr
NG tips:
http://msmvps.com/blogs/v_scherbina/pages/microsoft-newsgroups-tips.aspx
"Kerem Gümrükcü" <kare...@hotmail.com> wrote in message
news:exRtJzuT...@TK2MSFTNGP03.phx.gbl...
--
Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Website: http://www.windrvr.com
Blog: http://msmvps.com/blogs/WinDrvr
Remove StopSpam to reply
"Volodymyr Shcherbyna" <v_sch...@online.mvps.org> wrote in message
news:%23y3Uv1u...@TK2MSFTNGP02.phx.gbl...
Oh!, mis-spellings too,...this is really "gross"!
Bill M.
"Don Burn" <bu...@stopspam.windrvr.com> wrote in message
news:eoUioyuT...@TK2MSFTNGP05.phx.gbl...
--
Volodymyr
NG tips:
http://msmvps.com/blogs/v_scherbina/pages/microsoft-newsgroups-tips.aspx
"Don Burn" <bu...@stopspam.windrvr.com> wrote in message
news:OkLUL7uT...@TK2MSFTNGP02.phx.gbl...
--
Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Website: http://www.windrvr.com
Blog: http://msmvps.com/blogs/WinDrvr
Remove StopSpam to reply
"Volodymyr Shcherbyna" <v_sch...@online.mvps.org> wrote in message
news:OMOuyovT...@TK2MSFTNGP06.phx.gbl...
Have a look at our tdi.sys driver:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/tdi/
it's almost empty, most functions are just stubbed. What kind of binary 1:1
similarity and comments(!) match are you speaking about, if the whole tdi's
source code takes only 8 kilobytes?
It's nothing near real windows's TDI driver.
That's amazing how you all went further speaking about sueing our project
for having an empty driver with stubs, whose names correspond to the exported
functions list of a windows tdi.sys driver!
With the best regards,
Aleksey Bragin
ReactOS Project Lead
http://www.reactos.org
Email: aleksey at reactos dot org
--
Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Website: http://www.windrvr.com
Blog: http://msmvps.com/blogs/WinDrvr
Remove StopSpam to reply
"Aleksey Bragin" <Aleksey Bra...@discussions.microsoft.com> wrote in message
news:B702E896-5278-46BE...@microsoft.com...
Why don't you suggest MS suing Samba and Wine too, together with ReactOS?
They also do very high crime - implementing a compatible systems! Certainly
MS must only be the one and only!
P.S. Irony intended.
With the best regards,
Aleksey Bragin
ReactOS Project Lead
http://www.reactos.org
Email: aleksey at reactos dot org
"Implementing a compatible system" _while using the information leaks from the
original vendor_ is a law violation, and probably even a crime (depends on
country).
So, if there will be evidence that Samba and/or Wine developers used the leaked
MS's source to write their code - then Samba and/or Wine will have legal
issues.
Making a clone based on direct confidential information leaks from the original
vendor is surely punisheable.
"Implementing a compatible system" _based on reverse-engineering_ is a milder
thing, and probably not a law violation at all - any pharmaceutical company
from the country other then world's Top 10 do this to create "generic" drugs,
and I never heard it is illegal (unless the company also "borrow" the original
product name, which is a crime).
At least the Russian company of "Ferein" - well-known clonemaker of medicines
for ~13 years - was operating OK, and now is prosecuted due to tax dodging and
not due to IP violations.
--
Maxim Shatskih, Windows DDK MVP
StorageCraft Corporation
ma...@storagecraft.com
http://www.storagecraft.com
Aleksey,
I do not know of the legal ramifications of your product.
But I do thank you and your team for making something that lets mere
mortals like me understand how things may be working in Windows.
Disregard pointless flames and keep up the good work!
This IMHO happens too often to our Western civilization these times,
that it just can't react effectively to certain challenges ?
--PA
Bill M.
"Maxim S. Shatskih" <ma...@storagecraft.com> wrote in message
news:Op2DMS7T...@TK2MSFTNGP03.phx.gbl...
I am not sure if they ever determined that Microsoft actually broke any
licensing with this though.... I remember there was some controversy as to
whether the code they used was under GPL or BSD licenses. So, maybe
Microsoft didn't do anything wrong??
Bill M.
"Bill McKenzie" <bkmck...@sbcglobal.net> wrote in message
news:Or%23CslAU...@TK2MSFTNGP05.phx.gbl...
And in case with Wine (and in future Samba) we have to trust their own
method of ensuring code legality.
With the best regards,
Aleksey Bragin
ReactOS Project Lead
http://www.reactos.org
Email: aleksey at reactos dot org
Correct, and was punished by the court each time.
IIRC the largest penalties by the court imposed on MS were due to _OEM
agreements_ and not due to idea borrowing.
Maybe "Berkeley sockets" and not "Berkeley pipes"? Pipes in NT are very
different from UNIXen.
ReactOS is old, since 1999 or so. The known source leaks from MS were
around 04, so, maybe ReactOS is not using these leaks.
--
Maxim Shatskih, Windows DDK MVP
StorageCraft Corporation
ma...@storagecraft.com
http://www.storagecraft.com
"Aleksey Bragin" <Alekse...@discussions.microsoft.com> wrote in message
news:0D8D794F-161F-4947...@microsoft.com...
Anyone wants to join the team? :-)
With the best regards,
Aleksey Bragin
ReactOS Project Lead
http://www.reactos.org
Email: aleksey at reactos dot org
Aleksey, take a look at your version of Microsoft WinDDK TDI.H include file,
in my case the path is C:\WinDDK\6000\inc\api\tdi.h
Then, take a look at ReacOS version of include file:
ReactOS-0.3.3-REL-src\ReactOS-0.3.3\include\ddk\TDI.H
Browse over definitions. Look for several defines for tags,
{MICROSOFT
// These are tags that transports pass to ndis as a first param of
NdisAllocatePacketPoolEx
// api. Ndis uses this as pooltag for allocating packet pools for that
transport.
#define NDIS_PACKET_POOL_TAG_FOR_NWLNKIPX 'iPDN'
#define NDIS_PACKET_POOL_TAG_FOR_NWLNKSPX 'sPDN'
#define NDIS_PACKET_POOL_TAG_FOR_NWLNKNB 'nPDN'
#define NDIS_PACKET_POOL_TAG_FOR_TCPIP 'tPDN'
#define NDIS_PACKET_POOL_TAG_FOR_NBF 'bPDN'
#define NDIS_PACKET_POOL_TAG_FOR_APPLETALK 'aPDN'
}
{ReacOS
#define NDIS_PACKET_POOL_TAG_FOR_NWLNKIPX 'iPDN'
#define NDIS_PACKET_POOL_TAG_FOR_NWLNKSPX 'sPDN'
#define NDIS_PACKET_POOL_TAG_FOR_NWLNKNB 'nPDN'
#define NDIS_PACKET_POOL_TAG_FOR_TCPIP 'tPDN'
#define NDIS_PACKET_POOL_TAG_FOR_NBF 'bPDN'
#define NDIS_PACKET_POOL_TAG_FOR_APPLETALK 'aPDN'
}
Look at several structures,
{MICROSOFT
typedef UNALIGNED struct _TA_ADDRESS {
USHORT AddressLength; // length in bytes of Address[] in this
USHORT AddressType; // type of this address
UCHAR Address[1]; // actually AddressLength bytes long
} TA_ADDRESS, *PTA_ADDRESS;
}
{ReacOS
typedef struct _TA_ADDRESS {
USHORT AddressLength;
USHORT AddressType;
UCHAR Address[1];
} TA_ADDRESS, *PTA_ADDRESS;
}
Look at defines for strings,
{MICROSOFT
//
// define some names for the EAs so people don't have to make them up.
//
#define TdiTransportAddress "TransportAddress"
#define TdiConnectionContext "ConnectionContext"
#define TDI_TRANSPORT_ADDRESS_LENGTH (sizeof (TdiTransportAddress) - 1)
#define TDI_CONNECTION_CONTEXT_LENGTH (sizeof (TdiConnectionContext) - 1)
}
{ReacOS
#define TdiTransportAddress "TransportAddress"
#define TdiConnectionContext "ConnectionContext"
#define TDI_TRANSPORT_ADDRESS_LENGTH (sizeof(TdiTransportAddress) - 1)
#define TDI_CONNECTION_CONTEXT_LENGTH (sizeof(TdiConnectionContext) - 1)
}
Look at address types,
{MICROSOFT
//
// Known Address types
//
#define TDI_ADDRESS_TYPE_UNSPEC ((USHORT)0) // unspecified
#define TDI_ADDRESS_TYPE_UNIX ((USHORT)1) // local to host (pipes,
portals)
#define TDI_ADDRESS_TYPE_IP ((USHORT)2) // internetwork: UDP, TCP,
etc.
#define TDI_ADDRESS_TYPE_IMPLINK ((USHORT)3) // arpanet imp addresses
#define TDI_ADDRESS_TYPE_PUP ((USHORT)4) // pup protocols: e.g. BSP
#define TDI_ADDRESS_TYPE_CHAOS ((USHORT)5) // mit CHAOS protocols
#define TDI_ADDRESS_TYPE_NS ((USHORT)6) // XEROX NS protocols
#define TDI_ADDRESS_TYPE_IPX ((USHORT)6) // Netware IPX
#define TDI_ADDRESS_TYPE_NBS ((USHORT)7) // nbs protocols
#define TDI_ADDRESS_TYPE_ECMA ((USHORT)8) // european computer
manufacturers
#define TDI_ADDRESS_TYPE_DATAKIT ((USHORT)9) // datakit protocols
#define TDI_ADDRESS_TYPE_CCITT ((USHORT)10) // CCITT protocols, X.25 etc
#define TDI_ADDRESS_TYPE_SNA ((USHORT)11) // IBM SNA
#define TDI_ADDRESS_TYPE_DECnet ((USHORT)12) // DECnet
#define TDI_ADDRESS_TYPE_DLI ((USHORT)13) // Direct data link
interface
#define TDI_ADDRESS_TYPE_LAT ((USHORT)14) // LAT
#define TDI_ADDRESS_TYPE_HYLINK ((USHORT)15) // NSC Hyperchannel
#define TDI_ADDRESS_TYPE_APPLETALK ((USHORT)16) // AppleTalk
#define TDI_ADDRESS_TYPE_NETBIOS ((USHORT)17) // Netbios Addresses
#define TDI_ADDRESS_TYPE_8022 ((USHORT)18) //
#define TDI_ADDRESS_TYPE_OSI_TSAP ((USHORT)19) //
#define TDI_ADDRESS_TYPE_NETONE ((USHORT)20) // for WzMail
#define TDI_ADDRESS_TYPE_VNS ((USHORT)21) // Banyan VINES IP
#define TDI_ADDRESS_TYPE_NETBIOS_EX ((USHORT)22) // NETBIOS address
extensions
#define TDI_ADDRESS_TYPE_IP6 ((USHORT)23) // IP version 6
#define TDI_ADDRESS_TYPE_NETBIOS_UNICODE_EX ((USHORT)24) // WCHAR
Netbios address
}
{ReacOS
#define TDI_ADDRESS_TYPE_UNSPEC 0
#define TDI_ADDRESS_TYPE_UNIX 1
#define TDI_ADDRESS_TYPE_IP 2
#define TDI_ADDRESS_TYPE_IMPLINK 3
#define TDI_ADDRESS_TYPE_PUP 4
#define TDI_ADDRESS_TYPE_CHAOS 5
#define TDI_ADDRESS_TYPE_NS 6
#define TDI_ADDRESS_TYPE_IPX 6
#define TDI_ADDRESS_TYPE_NBS 7
#define TDI_ADDRESS_TYPE_ECMA 8
#define TDI_ADDRESS_TYPE_DATAKIT 9
#define TDI_ADDRESS_TYPE_CCITT 10
#define TDI_ADDRESS_TYPE_SNA 11
#define TDI_ADDRESS_TYPE_DECnet 12
#define TDI_ADDRESS_TYPE_DLI 13
#define TDI_ADDRESS_TYPE_LAT 14
#define TDI_ADDRESS_TYPE_HYLINK 15
#define TDI_ADDRESS_TYPE_APPLETALK 16
#define TDI_ADDRESS_TYPE_NETBIOS 17
#define TDI_ADDRESS_TYPE_8022 18
#define TDI_ADDRESS_TYPE_OSI_TSAP 19
#define TDI_ADDRESS_TYPE_NETONE 20
#define TDI_ADDRESS_TYPE_VNS 21
#define TDI_ADDRESS_TYPE_NETBIOS_EX 22
#define TDI_ADDRESS_TYPE_IP6 23
#define TDI_ADDRESS_TYPE_NETBIOS_UNICODE_EX 24
}
This is just a few copypastes from headers. It seems like ReacOS version is
just a quick copy of Microsoft TDI.H file, with removed comments, and
reordered definitions of strctures.
--
Volodymyr
NG tips:
http://msmvps.com/blogs/v_scherbina/pages/microsoft-newsgroups-tips.aspx
"Don Burn" <bu...@stopspam.windrvr.com> wrote in message
news:uB1LVexT...@TK2MSFTNGP03.phx.gbl...
We will keep you updated ;)
Obviously, those are public-available header files, and individual function
definitions, structures and defines can't be copyrighted or patented.
It's not really legal to fully *copy-paste* those header files, so a concept
of "retyping" (which is legal) was introduced, if I don't mistake, by MinGW
team. And thus we utilize that too.
With the best regards,
Aleksey Bragin
ReactOS Project Lead
http://www.reactos.org
Email: aleksey at reactos dot org
Exactly how else could compatibility be maintained? There's not more than
one way to do it, so independently solving the problem would assuredly yield
*exactly* the same result. In my understanding, in such a case there is no
copyright protection, only patents apply.
If you did black-box analysis, using printf or such to inspect the value of
each public constant without ever directly examining the header files, is
that not exactly the code you would write to implement it, with the possible
exception of the order?
It seems to me that proof of reverse engineering needs to go beyond what is
commonly available in the MSDN documentation.
Of course, it wouldn't be possible to provide an example without including
part of Microsoft's private source code in the post for comparison's sake,
which of course we cannot do as MVPs.
So the only thing Aleksey can do is ask Microsoft to review the code for
possible infringement and then rewrite sections indicated, or else wait for
the lawsuit.
So, if I were to rewrite these public headers in another laguage, say
Pascal, then there's no copyright violation in your opinion?
This approach of comparing syntax is not the point. Programming is not
about syntax, it's about code and data semantics.
BTW, public headers define an interface, not the actual code of the
target module.
I believe that that is correct, but IANAL. When a format conversion is
technical required for continued use of a properly purchased or licensed
product, that's allowed as well IIRC.
>
> This approach of comparing syntax is not the point. Programming is not
> about syntax, it's about code and data semantics.
>
> BTW, public headers define an interface, not the actual code of the
> target module.
You may fall afoul of some DMCA provisions that have nothing to do with
copyright, however, if that "public interface" is claimed to be part of some
"protection scheme".
Sounds similar to our EUCD.
> Obviously, those are public-available header files, and individual
> function
> definitions, structures and defines can't be copyrighted or patented.
>
> It's not really legal to fully *copy-paste* those header files, so a
> concept
> of "retyping" (which is legal) was introduced, if I don't mistake, by
> MinGW
> team. And thus we utilize that too.
OK, but the source code of XP SP ObOpenObjectByName function is definitely
not public. Recently I encountered, that ReactOS version of
ObOpenObjectByName
(http://www.reactos.org/generated/doxygen/d4/df6/obhandle_8c.html) is
suspiciously similar to Microsoft version of this function. The same
structure, rephrased comments, a little bit changed the name of internal
functions, but the structure, and logics is the same.
Personally, I don't have any issues againts ReactOS project, I just constate
the facts.
Good luck,
--
Volodymyr
"Aleksey Bragin" <Alekse...@discussions.microsoft.com> wrote in message
news:0D71E10D-4549-46B3...@microsoft.com...
Well, in the end, they're cloning the NT kernel so I think I'm not
surprise here and there the source and the logic may be very similar
to the original.
> Well, in the end, they're cloning the NT kernel so I think I'm not
> surprise here and there the source and the logic may be very similar
> to the original.
Well, tasks can be implemented using different techniques, I agree that
interfaces should be same (otherwise, how would they be compatible with
existing binaries), but implementation for sure will be different(!) if the
code _was_ not stolen.
At the moment I write this post, the ObOpenObjectByName of ReacOS
(http://www.reactos.org/generated/doxygen/d4/df6/obhandle_8c.html) is
implemented as following - see below. I hope, those who has access to XP SP2
code will have a chance to compare it with Windows equivalent:
/// ReactOS Implementation:
NTSTATUS NTAPI ObOpenObjectByName ( IN POBJECT_ATTRIBUTES
ObjectAttributes,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode,
IN PACCESS_STATE PassedAccessState,
IN ACCESS_MASK DesiredAccess,
IN OUT PVOID ParseContext,
OUT PHANDLE Handle
)
01452 {
01453 PVOID Object = NULL;
01454 UNICODE_STRING ObjectName;
01455 OBJECT_CREATE_INFORMATION ObjectCreateInfo;
01456 NTSTATUS Status;
01457 OBP_LOOKUP_CONTEXT Context;
01458 POBJECT_HEADER ObjectHeader;
01459 AUX_DATA AuxData;
01460 PGENERIC_MAPPING GenericMapping = NULL;
01461 ACCESS_STATE AccessState;
01462 OB_OPEN_REASON OpenReason;
01463 PAGED_CODE();
01464
01465 /* Check if we didn't get any Object Attributes */
01466 if (!ObjectAttributes)
01467 {
01468 /* Fail with special status code */
01469 *Handle = NULL;
01470 return STATUS_INVALID_PARAMETER;
01471 }
01472
01473 /* Capture all the info */
01474 Status = ObpCaptureObjectAttributes(ObjectAttributes,
01475 AccessMode,
01476 TRUE,
01477 &ObjectCreateInfo,
01478 &ObjectName);
01479 if (!NT_SUCCESS(Status)) return Status;
01480
01481 /* Check if we didn't get an access state */
01482 if (!PassedAccessState)
01483 {
01484 /* Try to get the generic mapping if we can */
01485 if (ObjectType) GenericMapping =
&ObjectType->TypeInfo.GenericMapping;
01486
01487 /* Use our built-in access state */
01488 PassedAccessState = &AccessState;
01489 Status = SeCreateAccessState(&AccessState,
01490 &AuxData,
01491 DesiredAccess,
01492 GenericMapping);
01493 if (!NT_SUCCESS(Status)) goto Quickie;
01494 }
01495
01496 /* Get the security descriptor */
01497 if (ObjectCreateInfo.SecurityDescriptor)
01498 {
01499 /* Save it in the access state */
01500 PassedAccessState->SecurityDescriptor =
01501 ObjectCreateInfo.SecurityDescriptor;
01502 }
01503
01504 /* Now do the lookup */
01505 Status = ObFindObject(ObjectCreateInfo.RootDirectory,
01506 &ObjectName,
01507 ObjectCreateInfo.Attributes,
01508 AccessMode,
01509 &Object,
01510 ObjectType,
01511 &Context,
01512 PassedAccessState,
01513 ObjectCreateInfo.SecurityQos,
01514 ParseContext,
01515 NULL);
01516 if (!NT_SUCCESS(Status)) goto Cleanup;
01517
01518 /* Check if this object has create information */
01519 ObjectHeader = OBJECT_TO_OBJECT_HEADER(Object);
01520 if (ObjectHeader->Flags & OB_FLAG_CREATE_INFO)
01521 {
01522 /* Then we are creating a new handle */
01523 OpenReason = ObCreateHandle;
01524
01525 /* Check if we still have create info */
01526 if (ObjectHeader->ObjectCreateInfo)
01527 {
01528 /* Free it */
01529 //ObpFreeAndReleaseCapturedAttributes(&ObjectCreateInfo);
01530 //ObjectHeader->ObjectCreateInfo = NULL;
01531 }
01532 }
01533 else
01534 {
01535 /* Otherwise, we are merely opening it */
01536 OpenReason = ObOpenHandle;
01537 }
01538
01539 /* Create the actual handle now */
01540 Status = ObpCreateHandle(OpenReason,
01541 Object,
01542 ObjectType,
01543 PassedAccessState,
01544 0,
01545 ObjectCreateInfo.Attributes,
01546 AccessMode,
01547 NULL,
01548 Handle);
01549 if (!NT_SUCCESS(Status)) ObDereferenceObject(Object);
01550
01551 Cleanup:
01552 /* Delete the access state */
01553 if (PassedAccessState == &AccessState)
01554 {
01555 SeDeleteAccessState(PassedAccessState);
01556 }
01557
01558 /* Release the object attributes and return status */
01559 Quickie:
01560 ObpReleaseCapturedAttributes(&ObjectCreateInfo);
01561 if (ObjectName.Buffer) ObpReleaseCapturedName(&ObjectName);
01562 OBTRACE(OB_HANDLE_DEBUG,
01563 "%s - returning Object %p with PC S: %lx %lx\n",
01564 __FUNCTION__,
01565 Object,
01566 Object ? OBJECT_TO_OBJECT_HEADER(Object)->PointerCount
: -1,
01567 Status);
01568 return Status;
01569 }
--
Volodymyr
Thanks,
James
Who Stole Who and Who copy Who , in fact
Microsoft was stolen many function of windows to concurent systems too,
since 1984
for example Apple for interface, Mozilla for IE, Pen recogniton system,
Doubledisk System for diskdoubler in XP. After they lock this idea with
trademark or copyright.
The Master of Univers Microsoft stolen what i want, not a crime for him but
not for others ...
In fact, ReactOs doesn't stole code see the last SVN source code for that,
in 2005 audit of code was made to eliminate this problem of stolen code in MS
Windows 2000 sources.
Today, in last version no code stolen, see the sources and talk after. Code
is more efficient and compact than Microsoft, the API functionnality was
coding with a different approach in sources.
Make an inventory of stolen code in MS Windows in Dot NET just for fun, and
see Linux Core and Mac OS, Mac OS X portion or function who was integrated in
MS Windows, but after a complete rewrite of course.
Where innovation here ?
Best regard