rationale 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. * The Mono Project
  2. ** Background.
  3. The GNOME project goal was to bring missing technologies to
  4. Unix and make it competitive in the current market place for
  5. desktop applications. We also realized early on that language
  6. independence was important, and that is why GNOME APIs were
  7. coded using a standard that allowed the APIs to be easily
  8. wrapped for other languages. Our APIs are available to most
  9. programming languages on Unix (Perl, Python, Scheme, C++,
  10. Objective-C, Ada).
  11. Later on we decided to use better methods for encapsulating
  12. our APIs, and we started to use CORBA to define interfaces to
  13. components. We complemented it with policy and a set of
  14. standard GNOME interfaces for easily creating reusable,
  15. language independent components, controls and compound
  16. documents. This technology is known as <a
  17. href="http://www.ximian.com/tech/bonobo.php3">Bonobo</a>.
  18. Interfaces to Bonobo exist for C, Perl, Python, and
  19. Java.
  20. CORBA is good when you define coarse interfaces, and most
  21. Bonobo interfaces are coarse. The only problem is that
  22. Bonobo/CORBA interfaces are not good for small interfaces.
  23. For example, an XML parsing Bonobo/CORBA component would be
  24. inefficient compared to a C API.
  25. ** Another explanation
  26. I recently explained our motivations to Dave Winer, and he posted
  27. it <a
  28. href="http://scriptingnews.userland.com/stories/storyReader$1275">here</a>
  29. ** Microsoft's .NET
  30. The Microsoft .NET initiative is confusing because it is a
  31. company wide effort that ranges from development tools to end
  32. user applications. .NET is a branding formative that
  33. has been applied to:
  34. <ul>
  35. * The .NET development platform, a new platform for
  36. writing software.
  37. * Web services.
  38. * Microsoft Server Applications.
  39. * New tools that use the new development platform.
  40. * Hailstorm, the Passport centralized single-signon
  41. system that is being integrated into Windows XP.
  42. </ul>
  43. Mono is an implementation of the .NET development platform.
  44. ** The Common Language Infrastructure platform.
  45. Microsoft has created a new development platform. The
  46. highlights of this new development platform are:
  47. <ul>
  48. * A runtime environment that provides garbage
  49. collection, threading and a virtual machine
  50. specification (The Virtual Execution System, VES)
  51. * A comprehensive class library.
  52. * A new language, C#. Very similar to Java, C#
  53. allows programmers to use all the features available
  54. on the .NET runtime.
  55. * A language specification that compilers can
  56. follow if they want to generate classes and code
  57. that can interoperate with other programming
  58. languages (The Common Language Specification: CLS)
  59. </ul>
  60. The Common Language Infrastructure platform is similar to the
  61. goals we had in GNOME of giving language independence to
  62. programmers. It is more mature, documented, larger in scope,
  63. and has a consistent design.
  64. Any API that is written using a CLS provider language can be
  65. used by any language that is a CLS consumer. Compilers
  66. generate code in a format called Common Intermediate Language
  67. (CIL) which is an intermediate representation of a compiled
  68. program and is easy to compile to native code or compiled
  69. using Just-in-Time (JIT) engines. The restrictions placed by
  70. the runtime on the CIL byte codes ensures that it is possible
  71. to do a good job at optimizing the code in a JIT compiler.
  72. There is not really a lot of innovation in this platform: we
  73. have seen all of these concepts before, and we are all
  74. familiar with how these things work.
  75. What makes the Common Language Infrastructure development
  76. platform interesting is that it is a good mix of technologies
  77. that have been nicely integrated.
  78. The .NET development platform is essentially a new foundation
  79. for program development that gives Microsoft a room to grow
  80. for the coming years.
  81. ** ECMA standards.
  82. Microsoft has submitted the
  83. specifications of C#, the runtime, the metadata and the
  84. other various bits of the .NET development platform to the
  85. <a href="http://www.ecma.ch">ECMA</a> for standarization.
  86. You can get a copy of the specifications submitted to ECMA
  87. from: <a href="http://www.dotnetexperts.com/ecma">http://www.dotnetexperts.com/ecma</a>
  88. ** Mono: an Open Source Common Language Infrastructure implementation.
  89. Ximian has begun work on Mono, a project that aims to bring
  90. the Common Language Infrastructure platform to free systems.
  91. When the GNU project was launched, they picked the best
  92. operating system that was available out there, and they
  93. began to clone it: Unix.
  94. The .NET development platform is a very rich, powerful, and
  95. well designed platform that would help improve the free
  96. software development platform. Just like the GNU project
  97. began to clone Unix sixteen years ago, we will be cloning the
  98. .NET development platform because it is a great platform to
  99. build on.
  100. ** What makes up Mono?
  101. There are various pieces that will make up Mono:
  102. <ul>
  103. * A C# compiler.
  104. * The Virtual Execution System: that will have the
  105. Just-in-Time compiler, garbage collector, loader,
  106. threading engine.
  107. A byte code interpreter will be provided for quickly
  108. porting Mono to new systems and debugging the JIT
  109. purposes, but it is not intended to be the ideal
  110. execution environment.
  111. * An implemenation of the .NET class library.
  112. * Visual development tools.
  113. * A CIL GCC frontend.
  114. </ul>
  115. ** Why use GNOME components?
  116. GNOME is an umbrella project that consists of infrastructural
  117. components (GUI toolkit, XML libraries, CORBA implementation,
  118. printing architecture, imaging system), a desktop environment,
  119. and productivity applications.
  120. The GNOME infrastructural components can be used to quickly
  121. implement various pieces of the class libraries without reinventing
  122. the wheel, and since all those components are licensed under
  123. the terms of the GNU LGPL it is a perfect fit.
  124. Libart will be used to implement the Drawing.2D API; Gtk+ and
  125. the GNOME libraries will be used to implement the WinForms
  126. API and of course Glib and libxml will be used in various
  127. places.