REACTOS PROJECT DEVELOPMENT POLICY 12 Decenber 2004 Preface The ReactOS(TM) Project is an international group of developers whose goal is to create a work-alike version of the Microsoft Windows operating system. In light of recent activity in the free software world relating to copyright and patent concerns, the administrators of the ReactOS Project feel that a formal Development Policy is needed. This document sets down that policy. For questions regarding this policy, please e-mail one of the following: - ros-general@reactos.com - General mailing list for the Project - jasonfilby@yahoo.com - ReactOS Project Founder and Coordinator - vizzini@reactos.com - ReactOS Kernel Coordinator Please note that none of this should be construed as legal advice, as warranties made by the Project about the code, or in any way other than as a statement of policy on the part of the Project. The "Microsoft" and "Windows" marks are property of Microsoft Corp. I. INTRODUCTION Because of the nature of the ReactOS Project, copyright, patent, and other legal issues regularly arise in the course of development. This document analyzes each of these areas law and explores implications for ReactOS development. This policy has been developed in the context of United States laws. However, similar laws exist in most other places, and an effort has been made to ensure that this policy is generally compatible with other jurisdictions. A. Helpful Definitions Throughout this policy document, the following definitions will apply, unless stated otherwise: Application Programming Interface (API): A collection of functions, data structures, constants, objects, etc., which defines the programming interface to a piece of software. For example, computer operating systems have APIs that must be used in order to write software to interoperate with those systems. "API" can refer to an individual function provided by the operating system. Compiler: A software development tool that translates human-readable source code into object code for execution in the target environment. Copyright: A form of government-created monopoly that protects creative expression, including written works, recorded works, songs, visual art, computer source code, and the like. Copyright protects the literal expression contained in a work, not the ideas and concepts that a work embodies. Copyright arises automatically in any copyrightable work at the moment it is fixed in tangible form, including the writing of computer source code and, sometimes, object code. Debugger: A piece of software that is used to help developers fix flaws in their software, or which is used to help developers understand more about the system on which they are developing. Examples include SoftICE from Compuware and WinDbg from Microsoft. Device Driver ("Driver"): A piece of software designed to directly or indirectly manage a piece of hardware on behalf of an operating system. Sometimes also used to refer to any software designed to run as a direct plug-in to an operating system kernel. Drivers tend to be very low-level, becoming part of the core of the operating system once they are loaded. They are generally very closely tied to an operating system architecture. Disassembler: A piece of software used to allow developers to convert object code into human-readable assembly language code. These are used to help developers fix flaws in their software and to help them understand the system in which their code runs. They are also used for source code recovery in case of loss of the original source code. Free Software: Software whose license conforms to the Free Software definition, as published by the Free Software Foundation (http://www.gnu.org). The GNU General Public License (GPL) is a popular Free Software license. Header File: A source code file, usually in the C or C++ programming languages, that is included by reference in other source code files. Header files provide information that defines the APIs, data structures, operational constants, and other characteristics of a software system. For example, to write software to run on an operating system, one must use the header files provided by that system's developers in order to interface with that system. Library: An object code file that contains reusable software components. In the setting of an Operating System, the system libraries must be used by third-party software to "link" functions with the operating system, so that the software can properly run on the operating system. Non-Free [Software]: Software that is not Free Software. Most commercial software still falls into this category. Object Code: Output from a compiler or other similar program designed to translate human-readable source code into a format suitable for execution in the targeted environment. Typically refers to machine language instructions that may be executed directly on a microprocessor. The counterpart of Source Code, which is translated (usually by a compiler) into object code. Operating System (OS): A special class of computer software designed to provide an environment in which general software can be run. Operating systems interface directly with the hardware of a computer, and provide a standardized set of services that applications can interface with. Examples include Microsoft(R) Windows(TM) XP, GNU/Linux(TM), and Apple(R) Macintosh(TM). Patent: A legal monopoly granted by the government to the inventor of a new and useful invention. Patents refer to tangible or intangible concepts, methods, procedures, practices, devices, and so on. Patents are not specific to a particular expression of an invention. Public domain: A work that is eligible for copyright protection may be placed in the public domain by explicit notice given by the original creator of the work. Once in the public domain, the work has no copyright whatsoever, and carries no protection of any kind. Service Mark: A trademark that is used to identify the source of one's services. Software Development Kit (SDK): Software and documentation used to create computer programs that interoperate with those of the SDK's supplier. Typically, these kits include C language header files, object code libraries, and various forms of documentation regarding the use of the kit and the details of the software that the kit is designed to support. Source Code: The representation of computer software in a computer programming language (such as C or C++). This term refers to the form of a program that is directly human-readable, and in which the software is typically originally written and maintained. Source code typically includes comments to aid the reader in understanding the software. In particular, source code includes header files. Trade Secret: Information that is valuable to its owner (typically a company), which would damage the company's ability to compete in the marketplace if it were revealed, which the owner takes affirmative steps to protect. Trademark: A mark that distinguishes a product of a particular producer. Trademarks are typically used to uniquely identify a product within an industry. II. COPYRIGHT ISSUES Copyright law is relevant to ReactOS in several contexts. The primary license in use by the Project, the GNU GPL, relies on the basic framework of copyright to provide for enforcement of its freedoms. Nearly all of the sample code, documentation, header files, and reference material available about the Windows APIs is subject to some form of copyright. A. ReactOS Copyright The ReactOS Project releases almost all of its code under the GNU General Public License (http://www.gnu.org). Each developer maintains his or her copyright in the developed source code, but licenses that code under the GPL for use by the ReactOS Project. Some portions of ReactOS may be licensed under other licenses, including the GNU Lesser GPL, or placed into the public domain. This is generally done only when necessary for compatibility with other projects. B. ReactOS License Binary Linking Exception The GNU GPL generally prohibits the combining of non-free software with GPL-licensed software such as ReactOS. That (or any other such policy) notwithstanding, the ReactOS Project's official position with respect to runtime linking of non-free modules is as follows: ReactOS may be used and distributed with non-free software such as commercial device drivers and commercial applications. This exception does not alter any other responsibilities of the licensee under the GPL. This exception is seen as a compromise by the Project. We do not encourage the use of non-free software on ethical principle. We urge the use of hardware that does not require the use of non-free software for proper operation, and we support and recommend companies that supply Free (as in speech) drivers, software, and tools. Furthermore, the Project urges developers to continue to create Free device drivers for hardware where only non-free drivers currently exist. C. Copyrights of Others The ReactOS Project depends on copyright law for the protection of its code, and by the same token, it respects the copyrights of others. Following are the policies of the ReactOS Project as they relate to copyright: 1) Code copying is absolutely never allowed, unless the copied code is in the public domain or is distributed under a Free software license which permits is combination with a GPL program, such as ReactOS (i.e. is GPL Compatible). You should always assume that you do not have a license unless you are explicitly given one. 2) Source code with non-free licenses may not be included in ReactOS. This includes header files, support files, and implementation files. Such code may be used for educational purposes, however, assuming you have a license to possess the code. For example, in the absence of non-disclosure agreements, and in the presence of a valid license, you may study and learn from non-free sample code. 2a) An important side-effect of a non-free license is that you may never copy and paste code from a non- free system into ReactOS. Furthermore, simply re-typing existing code constitutes copying, and is a violation of the copyright. To produce code that works similarly to given sample code, the developer is permitted to reverse engineer a program to study and understand the existing code, subject to the terms of any license agreement. The developer, however, must craft new code from scratch based on what he/she has learned. 2b) Developers are encouraged to NOT attempt to copy the coding style of non-free code. While coding style may not covered by copyright, a similar or identical coding style to a piece of non-free code casts suspicion on the new code. 2c) In particular, source code comments are covered by the code's copyright and may NOT be copied, even into an otherwise-original work, subject to the exception of fair use. 3) Source code which is acquired under a non-disclosure agreement is a special case, and requires study of the non-disclosure agreement itself. Before using any knowledge gained from studying such code, please discuss the specifics of the NDA with the Project administrators. 4) In all cases, the ReactOS Project requires its participants to adhere to the terms of the licenses of any software used in the development of ReactOS. It is best, in general, to avoid any non-free licenses at all, of course. 5) Fair Use. Copyrighted materials carry with them certain irrevocable rights of fair use. One important such right is the right to study a copyrighted work for educational purposes. It is in this light that third-party, non-NDA-covered development kits are studied in order that the Project participants might produce compatible software. 6) Reverse engineering. Many non-free software packages have a specific clause in their licenses to prohibit reverse engineering. It is the opinion of the ReactOS Project that these license restrictions are only valid to the extent that they prohibit intentional conversion of object code to corresponding source code and subsequently claiming ownership of that source code. Reverse engineering, a form of which happens every time a developer traces into an operating system's core code with a debugger to find a problem with his/her code, is held to be covered by Fair Use. Any source code produced by direct reverse engineering should be treated in exactly the same way as any other non-free source code - useful for study and understanding of the system, but not permitted for inclusion in ReactOS. 6a) Disassembly of object code is held to be a form of reverse engineering. Disassembled code listings should be treated with the same terms of license as the object code itself. 7) SDK License restrictions. Certain SDKs that are frequently referenced by Project members are distributed under a non-free license. Some of these licenses include various restrictions on the use of the software developed with the SDKs. In particular, Microsoft lists restrictions on which operating systems drivers built using its DDK may be used. These restrictions are in force only in drivers which directly include Microsoft-supplied header or library files in the source or object code. In general, these kinds of restrictions do not go to the documentation contained within such SDKs, and source code (header files, in particular) may be referenced for educational purposes and to facilitate interoperability, as discussed above. 7a) It is the position of the ReactOS Project that certain components of these SDKs are not covered by copyright. The Project believes that names of symbolic constants, data structure types, and so on, are not statutory copyright material because they are functional elements and do not include creative expression. Therefore, it is the position of the Project that developers may name their own corresponding data structures, manifest constants, enumerated types, etc., identically to those found in copyrighted works. 7b) Furthermore, the names of data structures and components are required to be identical for compatibility with third-party source code, and as such, are the same as are found in Microsoft SDKs. 7c) Data structures must match identically with those that are expected by third-party software in order to achieve full compatibility of ReactOS with Windows. While it is prohibited to directly copy any data from a copyrighted file, ReactOS permits the re-creation of compatible data structures to those found in non-free SDKs. 8) "Tainted Developers". There is a legal theory that is occasionally cited in the context of producing a work-alike implementation of a published copyrighted work. There is concern that, if the creators of the new work have seen the original work, they will be unable to create a similar work without infringing the copyright of the original. It is the position of the Project that this theory is invalid for a number of reasons. As a general rule, there is no reason that a developer who has seen non-free code cannot write logically similar code for ReactOS. 8a) Developers who have entered into non-disclosure agreements preventing them from using knowledge they gain working on non-free code in the development of ReactOS should abide by the rules of their respective agreements. The Project administrators require disclosure of any relevant non-disclosure agreements prior to the submission of any code to the Project, or indeed prior to any non-trivial participation of any sort, including posting on mailing lists, participating in IRC, and so on. These developers have clearly "tainted" themselves quite intentionally. 8b) Developers who have had access to proprietary source code that would have originally fallen under trade secret protection (including, for example, the leaked Microsoft Windows source code) are a special case. The copyright issues are unchanged, as are the patent issues, but any developer who has the code is clearly either under an NDA or else does not have a license to possess the code. In the latter case, there is a clear violation of the relevant trade secrets by the developer. As such, this kind of code is unsuitable even for research and understanding. It is the policy of the Project to not take submissions from developers who have or use any such proprietary code in their development efforts for ReactOS. 9) The project coordinators will make every effort to ensure that the codebase honors the copyrights and licenses of all code that is a part of the system. However, because of the size and complexity of the system, it is impossible to guarantee that infringement will never occur. The coordinators of the Project agree to promptly remove any infringing code from the codebase after being notified of such infringement, subject to confirmatory analysis by a Project administrator. Please notify the three e-mail addresses listed at the top of this document to request removal of material you believe to be in violation of its copyright. III. PATENT ISSUES Software patents have a profound affect on the ReactOS Project. Currently, software patents are legal (i.e. software is statutory matter) in the United States. As a rule, patents are fundamentally incompatible with Free Software, and should be carefully avoided in the context of such projects. Patent infringement occurs whenever anyone "makes, sells, uses, or offers to sell" a patented invention without a license to do so from the patent's owner. It is clear that all developers on the Project are affected by patents. This is an extremely difficult issue to address, but the Project's policies regarding patents are as follows: 1) The ReactOS Project administrators, coordinators, and participants are not required to make an active search for potentially relevant patents. A patent search covering all aspects of a system as complicated as ReactOS would be impractical, or at least prohibitively expensive and time- consuming. 2) The Project participants will make a good-faith effort to disclose any known patents relevant to the development of ReactOS to the project administrators. This does not mean that the project desires others to engage in a full patent search; it does, however, mean that developers are duty-bound to report any patents that they know of that they suspect might be relevant. 3) The Project administrators will maintain a list of relevant patents, and will make a good-faith effort to avoid infringement. As a rule, legal counsel will not be sought out on each patent. Instead, the project leaders, at their discretion, will make a determination as to the technical relevance of patents, and if necessary, will direct the removal and/or redesign of infringing parts of the system. 4) Project participants agree that they will not seek patent protection for any new developments made in conjunction with ReactOS, or in the alternative, agree in advice to assign ownership of such patents to the ReactOS Foundation, or else to grant a perpetual, irrevocable, transferable, royalty-free license to anyone who wishes to use the patented invention in conjunction with the ReactOS system or in any derivative work of the system (in other words, something like a "patent-left"). 5) The coordinators of the Project agree to promptly remove infringing implementations of patented inventions from the codebase, subject to a confirmatory analysis by a Project administrator. Please notify the three e-mail addresses listed at the top of this document to request removal of material you believe to be in violation of a patent. IV. TRADEMARK ISSUES The ReactOS Project endeavors to respect the trademarks of others, and takes steps to protect the integrity of its marks. Project policies relating to trademarks include the following: 1) The integrity of the ReactOS mark must be maintained at all times. Developers are asked to use ReactOS mark carefully, and to always note the existence of the mark with a (TM) sign after the first use in any published materials. 2) Any Project member writing published materials such as documentation, news articles, website content, and so on, must take all appropriate measures to protect the marks of others by indicating the appropriate (TM) and (R) designations on first use of a mark. V. TRADE SECRET ISSUES >From time to time, members of the ReactOS Project may find themselves in possession of information that is prohibited from further dissemination. This is the case when the participant is in possession of trade secrets. Possessors of trade secrets are encouraged to maintain the secrecy of the relevant information. Public projects such as ReactOS are generally incompatible with trade secrets. Project members should never reveal trade secrets to the Project. The Project maintains no trade secrets, and while it makes every effort to respect the trade secrets of others, the Project makes no guarantees on behalf of any of the members of the project. It is the policy of the Project to not possess trade secrets. This means that project participants should never acquire access to trade secrets in the context of their work on ReactOS. VI. NON-DISCLOSURE AGREEMENTS Members of the ReactOS project may occasionally find it necessary to enter into various non-disclosure agreements. Due to the fundamentally incompatible nature of the Project with the concept of non-disclosure, it is the policy of the project not to enter into any non-disclosure agreements for any reason. Project members are required to inform the Project coordinators of any such agreements that might be relevant to their participation in the project. The Project will make a good-faith effort to prevent the violation of non-disclosure agreements on the part of project participants, but it makes no guarantees as to the behavior of participants. Participants that are found to be under a relevant NDA are prohibited from supplying code, documentation, implementation advice, architecture advice, etc., that is covered by that NDA to the project. Any such code that is supplied in violation of an NDA will be removed from the codebase. VII. Other 1) Trademark and Service Mark Anti-Dilution. Anti-dilution provisions prevent even the un-related use of a "famous" mark or at trademark that is confusingly similar to a famous mark. ReactOS uses only one mark, the ReactOS mark itself, which does not appear to raise any trademark anti- dilution issues with any other marks. 2) Trade Dress. Trade Dress refers to the look-and-feel of a product. Famous examples include the Coca-Cola bottle and the Apple Macintosh user interface. It is the policy of the ReactOS Project to respect the trade dress of others. The Project is currently unaware of any trade dress issues with other products. Developers should attempt to continue to distinguish ReactOS from other products for the purpose of avoiding trade dress issues. VIII. DEVELOPMENT KITS ReactOS requires the use of several third-party software development kits for its development. These each present unique legal issues. The following development kits are used in the development of ReactOS: - Microsoft Platform SDK (including related and component SDKs): This SDK can be found at http://www.microsoft.com/msdownload/platformsdk/sdkupdate/. This SDK contains header files, libraries, documentation, and other support files, as well as sample source code for programs that illustrate use of the API defined in the SDK. This is the main development kit that is used to develop third-party software to be run on Microsoft and Microsoft-compatible operating systems. - Microsoft Driver Development Kit (DDK): A special-purpose SDK designed for the development of kernel-mode software (including device drivers). - Microsoft Installable File system Kit (IFS): A special-purpose SDK designed for the development of certain kernel-mode components known as file systems. This kit is distributed under a restrictive license and for a fee of around $1000.