[ros-general] ReactOS IP Policy Document

Jason Filby jason.filby at gmail.com
Sat Jan 15 13:26:07 CET 2005


Hi all

Vizzini has spent a lot of time writing a ReactOS IP Policy Document;
he's also had it reviewed by lawyers. I agree what's written here, and
would like to get some feedback from the community before we publish
it as our official policy.

Regards
Jason
-------------- next part --------------
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 at reactos.com - General mailing list for the Project
 - jasonfilby at yahoo.com - ReactOS Project Founder and Coordinator
 - vizzini at 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.




More information about the ros-general mailing list