
     _________________________________________________________________

  Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM),
  DAnCE(TM), and CoSMIC(TM)

   [1]ACE(TM), [2]TAO(TM), [3]CIAO(TM), DAnCE(TM), and [4]CoSMIC(TM)
   (henceforth referred to as "DOC software") are copyrighted by
   [5]Douglas C. Schmidt and his [6]research group at [7]Washington
   University, [8]University of California, Irvine, and [9]Vanderbilt
   University, Copyright (c) 1993-2018, all rights reserved. Since DOC
   software is open-source, freely available software, you are free to
   use, modify, copy, and distribute--perpetually and irrevocably--the
   DOC software source code and object code produced from the source, as
   well as copy and distribute modified versions of this software. You
   must, however, include this copyright statement along with any code
   built using DOC software that you release. No copyright statement
   needs to be provided if you just ship binary executables of your
   software products.

   You can use DOC software in commercial and/or binary software releases
   and are under no obligation to redistribute any of your source code
   that is built using DOC software. Note, however, that you may not
   misappropriate the DOC software code, such as copyrighting it yourself
   or claiming authorship of the DOC software code, in a way that will
   prevent DOC software from being distributed freely using an
   open-source development model. You needn't inform anyone that you're
   using DOC software in your software, though we encourage you to let
   [10]us know so we can promote your project in the [11]DOC software
   success stories.

   The [12]ACE, [13]TAO, [14]CIAO, [15]DAnCE, and [16]CoSMIC web sites
   are maintained by the [17]DOC Group at the [18]Institute for Software
   Integrated Systems (ISIS) and the [19]Center for Distributed Object
   Computing of Washington University, St. Louis for the development of
   open-source software as part of the open-source software community.
   Submissions are provided by the submitter ``as is'' with no warranties
   whatsoever, including any warranty of merchantability, noninfringement
   of third party intellectual property, or fitness for any particular
   purpose. In no event shall the submitter be liable for any direct,
   indirect, special, exemplary, punitive, or consequential damages,
   including without limitation, lost profits, even if advised of the
   possibility of such damages. Likewise, DOC software is provided as is
   with no warranties of any kind, including the warranties of design,
   merchantability, and fitness for a particular purpose,
   noninfringement, or arising from a course of dealing, usage or trade
   practice. Washington University, UC Irvine, Vanderbilt University,
   their employees, and students shall have no liability with respect to
   the infringement of copyrights, trade secrets or any patents by DOC
   software or any part thereof. Moreover, in no event will Washington
   University, UC Irvine, or Vanderbilt University, their employees, or
   students be liable for any lost revenue or profits or other special,
   indirect and consequential damages.

   DOC software is provided with no support and without any obligation on
   the part of Washington University, UC Irvine, Vanderbilt University,
   their employees, or students to assist in its use, correction,
   modification, or enhancement. A [20]number of companies around the
   world provide commercial support for DOC software, however. DOC
   software is Y2K-compliant, as long as the underlying OS platform is
   Y2K-compliant. Likewise, DOC software is compliant with the new US
   daylight savings rule passed by Congress as "The Energy Policy Act of
   2005," which established new daylight savings times (DST) rules for
   the United States that expand DST as of March 2007. Since DOC software
   obtains time/date and calendaring information from operating systems
   users will not be affected by the new DST rules as long as they
   upgrade their operating systems accordingly.

   The names ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), CoSMIC(TM),
   Washington University, UC Irvine, and Vanderbilt University, may not
   be used to endorse or promote products or services derived from this
   source without express written permission from Washington University,
   UC Irvine, or Vanderbilt University. This license grants no permission
   to call products or services derived from this source ACE(TM),
   TAO(TM), CIAO(TM), DAnCE(TM), or CoSMIC(TM), nor does it grant
   permission for the name Washington University, UC Irvine, or
   Vanderbilt University to appear in their names.

   If you have any suggestions, additions, comments, or questions, please
   let [21]me know.

   [22]Douglas C. Schmidt
     _________________________________________________________________

   Back to the [23]ACE home page.

References

   1. http://www.dre.vanderbilt.edu/~schmidt/ACE.html
   2. http://www.dre.vanderbilt.edu/~schmidt/TAO.html
   3. http://www.dre.vanderbilt.edu/CIAO/
   4. http://www.dre.vanderbilt.edu/cosmic/
   5. http://www.dre.vanderbilt.edu/~schmidt/
   6. http://www.dre.vanderbilt.edu/~schmidt/ACE-members.html
   7. http://www.wustl.edu/
   8. http://www.uci.edu/
   9. http://www.vanderbilt.edu/
  10. mailto:doc_group@cs.wustl.edu
  11. http://www.dre.vanderbilt.edu/~schmidt/ACE-users.html
  12. http://www.dre.vanderbilt.edu/~schmidt/ACE.html
  13. http://www.dre.vanderbilt.edu/~schmidt/TAO.html
  14. http://www.dre.vanderbilt.edu/CIAO/
  15. http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/DAnCE/
  16. http://www.dre.vanderbilt.edu/cosmic/
  17. http://www.dre.vanderbilt.edu/
  18. http://www.isis.vanderbilt.edu/
  19. http://www.cs.wustl.edu/~schmidt/doc-center.html
  20. http://www.dre.vanderbilt.edu/~schmidt/commercial-support.html
  21. mailto:d.schmidt@vanderbilt.edu
  22. http://www.dre.vanderbilt.edu/~schmidt/
  23. http://www.dre.vanderbilt.edu/~schmidt/ACE.html
