diff options
Diffstat (limited to 'web')
123 files changed, 16920 insertions, 0 deletions
diff --git a/web/.cvsignore b/web/.cvsignore new file mode 100644 index 00000000000..6d3ceb93234 --- /dev/null +++ b/web/.cvsignore @@ -0,0 +1,4 @@ +Makefile.in +Makefile +all-docs +pending-classes.in diff --git a/web/Makefile.am b/web/Makefile.am new file mode 100644 index 00000000000..4df74ba2f02 --- /dev/null +++ b/web/Makefile.am @@ -0,0 +1,37 @@ +WEB_FILES= \ + ado-net anoncvs asp-net books ccvs c-sharp class-library contact contributing devel-faq documentation download \ + embedded-api faq firebird gcc-frontend hackers ideas index \ + java jit-debug languages mailing-lists monodoc-xml mysql odbc \ + oledb papers \ + passport plans porting postgresql ppc projects rationale \ + resources roadmap runtime sqlclient sqlite sybase tdsclient \ + tds-providers team status team testing thanks tools \ + porting anoncvs monodoc-xml winforms + +OTHERS= pending resources-pending todo mono-build.sh mono-build-w32.sh + +EXTRA_DIST = $(WEB_FILES) README $(OTHERS) + +all-docs: $(WEB_FILES) + cat rationale roadmap c-sharp tools class-library \ + runtime documentation download faq contributing \ + resources status > all-docs + +class-status: class-status.in pending-classes Makefile.am + cat class-status.in pending-classes > class-status + +pending-classes: + +#pending-classes: pending-classes.in Makefile.am +# echo "This is a list of pending classes, and links to their documentation on MSDN.Microsoft.com<p><p>" > pending-classes +# for i in `cat pending-classes.in`; do x=`echo $$i | sed s/\\\.//g`; link=`echo http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrf@@@ClassTopic.asp | sed "s/@@@/$$x/"`; echo " <a href=\"$$link\">$$i</a><br>" >> pending-classes; done + + +webit: dummy + (cd web; make && make push) + +push-notes: + scp release-notes/mono* www@www:/web/cvsmodules/mono/archive + +dummy: + diff --git a/web/MonoIcon.png b/web/MonoIcon.png Binary files differnew file mode 100644 index 00000000000..c670edb5011 --- /dev/null +++ b/web/MonoIcon.png diff --git a/web/README b/web/README new file mode 100644 index 00000000000..333d133943f --- /dev/null +++ b/web/README @@ -0,0 +1,17 @@ +To edit the website appearance: + +cd doc/web +edit template.html.in +make + +To edit website content: + +cd doc (this directory) +edit files carefully +cd web +make + +To publish changes: + +cd web +make push diff --git a/web/ado-net b/web/ado-net new file mode 100644 index 00000000000..0f40c246db8 --- /dev/null +++ b/web/ado-net @@ -0,0 +1,240 @@ +* ADO.NET + + <p>Mono's ADO.NET Developers: + <ul> + <li>rodrigo -AT- ximian.comNOSPAM - <b>Rodrigo Moya</b> - coordinator + for the ADO.NET implementation and works on the OLE DB provider</li> + <li>danmorg -AT- sc.rr.comNOSPAM - <b>Daniel Morgan</b> - works on + the MySQL, PostgreSQL, and Oracle providers</li> + <li>tim -AT- timcoleman.comNOSPAM - <b>Tim Coleman</b> - works on + the Microsoft SQL Server, Sybase, and TDS providers</li> + <li>brianlritchie -AT- hotmail.comNOSPAM - <b>Brian Ritchie</b> - works on + the ODBC provider and the ProviderFactory</li> + <li>vladimir -AT- pobox.comNOSPAM - <b>Vladimir Vukicevic</b> - works on + the SQL Lite provider</li> + <li>cleared -AT- rogers.comNOSPAM - <b>Christopher Bockner</b> - works on + the IBM DB2 provider</li> + <li>vi64pa -AT- koti.soon.fiNOSPAM - <b>Ville Palo</b> - works on XML stuff in System.Data + including DataSet, XmlDataDocument, and has done lots of testing</li> + </ul> + +* Action plan + + <p>The current plan to implement ADO.NET is as follows: + + <ul> + <li>Either create ADO.NET providers or modify pre-exiting ADO.NET providers to + work with Mono</li> + + <ul> + <li>Create ADO.NET Providers + + <ul> + <li><a href="http://www.go-mono.com/ibmdb2.html">IBM DB2 Universal Database</a></li> + <li><a href="http://www.go-mono.com/mysql.html">MySQL</a></li> + <li><a href="http://www.go-mono.com/odbc.html">ODBC</a></li> + <li><a href="http://www.go-mono.com/oracle.html">Oracle</a></li> + <li><a href="http://www.go-mono.com/oledb.html">OLE DB</a></li> + <li><a href="http://www.go-mono.com/postgresql.html">PostgreSQL</a></li> + <li><a href="http://www.go-mono.com/sqlclient.html">Microsoft SQL Server</a></li> + <li><a href="http://www.go-mono.com/sqlite.html">SQL Lite</a></li> + <li><a href="http://www.go-mono.com/sybase.html">Sybase</a></li> + <li><a href="http://www.go-mono.com/tdsclient.html">TDS Generic</a></li> + <li>Providers which we do not have, but we would like to have. Currently, + some of these databases are supported via the ODBC or OLEDB providers.</li> + <ul> + <li><a href="http://msdn.microsoft.com/library/en-us/dnsql2k/html/sqlxml_intromanagedclasses.asp?frame=true">Managed Classes for SqlXml</a> which is + a .NET data provider for retrieving XML data from a Microsoft SQL Server 2000 database. The System.Data.SqlClient provider + in Mono can be used as a starting point at mcs/class/System.Data/System.Data.SqlClient.</li> + <li><a href="http://www.hughes.com.au/">miniSQL</a></li> + <li><a href="http://www.sleepycat.com/">BerkeleyDB (Sleepycat)</a></li> + <li><a href="http://www.sapdb.org/">SapDB</a></li> + <li>Microsoft Access - could be done by creating C# bindings to <a href="http://mdbtools.sourceforge.net">MDB Tools</a></li> + <li>dbase or xbase type database files</li> + <li>Others are welcome</li> + </ul> + </ul></li> + <br> + <li>Modify Pre-existing ADO.NET Providers to work with Mono. This may + require fixing or implementing areas of Mono too. + <ul> + <li><a href="http://www.go-mono.com/firebird.html">Firebird Interbase</a></li> + <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> is a + PostgreSQL Managed data provider written + in 100% C#, does not require a client library, and works on Mono</li> + <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a + MySQL Manager data provider written in 100% C#, does not + require a client library, and works on Mono</li> + </ul> + </li> + </ul> + <br> + <li>Create Tools for Configuration, Testing, and Entering SQL Queries + <ul> + <li><b>SQL# CLI - a command-line tool</b> written in C# to + execute SQL commands, + test connection strings, and connect to various ADO.NET + providers in Mono. The SQL# CLI can be found in + mcs/tools/SqlSharp/SqlSharpCli.cs</li> + + <li><p><b>SQL# GUI - a GUI tool</b> written in C# to + execute SQL commands. + Currently, there is SQL# For GTK# which + can be found at + mcs/tools/SqlSharp/gui/gtk-sharp + It has a SQL editor with + syntax hi lighting of SQL keywords. This will be + moving to its own cvs modeul sqlsharpgtk.</li> + + <li><b>Configuration Command-Line and GUI Tools for ADO.NET</b>. + These tools have not been started. The tools would be written in + C# and run on Mono. The + configuration tool can be used to do the following: + <ul> + <li>setup DSNs for the ODBC and OLE-DB + providers and configurations for + their underlying libraries (unixODBC and libgda)</li> + <li>setup configurations for the Mono.Data.ProviderFactory + that Brian Ritchie created</li> + <li>setup native database client library configurations too, such as, + freetds.conf for Microsoft SQL Server and Sybase</li> + </ul> + </li> + </ul> +</ul> + +* Current Status + + <p>Variouls ADO.NET Providers have been created: PostgreSQL, MySQL, Sybase, SQL Lite, + Microsoft SQL Server, OLE DB, ODBC, and TDS Generic. See their respective web page for + more information. + + <p>Constraints need lots of work + + <p>TypeDataSetGenerator needs to be stubbed and implemented. + + <p><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn, + DataColumnCollection, DataRowCollection, and others</b> need more work. There are + many classes that are just stubs and need to be implemented. + + <p><b>XML support in System.Data</b> needs work. This involves working on + the classes: DataSet, XmlDataDocument, and the method ExecuteXmlReader() that + exists in a provider's class that implements IDbCommand, and others. + Stuart Caborn has started the XML support in a DataSet. Tim Coleman started + XML support in the ExecuteXmlReader() in a SqlCommand. Ville Palo has been + heavily modifying DataSet, XmlDataDocument, and other classes for reading + and writing XML. + + <p><b>ADO.NET Provider Factory</b> has been started by Brian Ritchie. The + Provider Factory is way to dynamically create + connections, commands, parameters, and data adapters based on configuration information. The + provider factory also provides utility functions needed by a lot of + providers but are not exposed via the provider. The ProviderFactory + is found at mcs/class/Mono.Data and includes a test named test.cs for it in + mcs/class/Mono.Data/Test. Also, take a look at the sample .config file for the + test.exe application named test.exe.config. The .config file is automatically + read when you use the Mono.Data.ProviderFactory or Mono.Data.DataTools. + + <p><b>Integration with ASP.NET</b> has not been started, such as, data binding + to a System.Web.UI.WebControls.DataGrid. This may involve implementing many classes + in System.Web and System.Data. If you want to help, + contact Gonzalo Paniagua Javier. Here is information about using ADO.NET in ASP.NET: + <ul> + <li>Take a look at xsp in cvs and look at the examples in test: dbpage1.aspx + and dbpage2.aspx: + <ul> + <li>Notice that the namespace System.Data is imported via <b>import</b></li> + <li>A NameValueCollection is gotten using ConfigurationSettings.AppSetings. These + settings are gotten from the file server.exe.config which is a XML file. The XML + file has a section appSettings. In the appSettings section, you have keys + for DBProviderAssembly, DBConnectionType, and DBConnectionString. + <ul> + <li><b>DBProviderAssembly</b> is the assembly of the ADO.NET provider. + For example: + "Mono.Data.PostgreSqlClient"</li> + <li><b>DBConnectionType</b> is the System.Type of the class that + implements System.Data.IDbConnection that is found + in the DBProviderAssembly. + For example: + "Mono.Data.PostgreSqlClient.PgConnection"</li> + <li><b>DBConnectionString</b> is the ConnectionString to set to the + IDbConnection object to use in opening a connection to a data source. + For Example: + "hostaddr=127.0.0.1;user=monotest;password=monotest;dbname=monotest"</li> + </ul> + <li>The function GetConnectionData() gets the database provider assembly, connection type, + and connection string parameters if they exist; otherwise, it uses default values. This is + done during the loading of the web page.</li> + <li>With the connection parameters, the assembly is loaded, the connection type is verified that + it implements IDbConnection and an instance of the class can be created, creates a instance + of the class, sets the connection string, and opens the connection.</li> + </ul> + </li> + </ul> + + <p><b>Integration with Windows.Forms</b> has not been started, such as, data binding + to a System.Windows.Forms.DataGrid. This may involve implementing many classes + in System.Windows.Forms and System.Data. + + <p><b>Integration with <a href="http://gtk-sharp.sourceforge.net/">GTK#</a></b> + has not been started, such as, data binding + to a GtkTreeView. This may involve creating new classes + to go between the glist data model and the ADO.NET data model. + Mike Kestner would be the best person to ask for help on GTK#. + + <p><b>Integration with QT#</b> has not been started. Any information on + how this can be done is appreciated. Adam Treat would be the best + person to ask about QT#. + + <p><b>Building System.Data</b> + + <p>The System.Data.dll gets built with the rest of the class library. + To compile the System.Data.dll assembly separately, you need: + + <b>On Unix</b> + + <ul> + * update your mono sources. Be sure you have latest mcs.exe + and .dll's, since there have been many fixes needed for + compilation on Linux. + + * compile System.Data.dll: +<pre> + cd mcs/class/System.Data<br> + mcs --target library -o \ + System.Data.dll @list +</pre> + </ul> + + <b>On Windows</b> + + <ul> + * update your mono sources. Be sure you have latest mcs.exe + and .dll's. You can use the same method as Linux, + or you can use NAnt. + + * To use NAnt: + +<pre> + cd mcs/class/System.Data + ../../nant/NAnt.exe +</pre> + + * This will automatically copy the System.Data.dll to Test. + If you need to do a clean for the System.Data.dll assembly,<br><br> + +<pre> + cd mcs/class/System.Data + ../../nant/NAnt.exe clean +</pre> + </ul> + +* Testing + +<ul> + <li>Testing connection-oriented classes are done via the provider specific tests + + <li><a href="http://www.go-mono.com/testing.html">Testing non-connection classes</a> are + done via mono's modified version of NUnit.</li> + +</ul> diff --git a/web/anoncvs b/web/anoncvs new file mode 100644 index 00000000000..2e72173b458 --- /dev/null +++ b/web/anoncvs @@ -0,0 +1,70 @@ +* Anonymous CVS access + + Anonymous access to the Mono is available currently from three + servers (anoncvs-spain-1.go-mono.com, + anoncvs-spain-2.go-mono.com and anoncvs-us-1.go-mono.com). + + You can also use `anoncvs.go-mono.com', and that will pick a + server automatically for you. + + Sources are currently being updated every hour. + +** Checking out the sources + + To check out the sources for the first time from the + repository, use this command: + +<pre> + export CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono + cvs login + cvs -z3 co mcs mono gtk-sharp +</pre> + + That will get you the compiler and class libraries (mcs), the + interpreter and JITer (mono) and the Gtk# bindings. + + The server is located in Spain. + +** Updating the sources + + To update your sources every day, you use this command: + +<pre> + export CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono + cvs -z3 update -dP mcs mono gtk-sharp +</pre> + +** Thanks + + Thanks to <a href="http://www.hispalinux.es">HispaLinux</a> + for providing this Anon CVS server. The server is located in + Spain. + + Special thanks to Jesus Climent, Rodrigo Moya, Juantomás + García and Ismael Olea for making this happen. + +<a name="#mirror"> +** Becoming an AnonCVS mirror + + To become an AnonCVS mirror, you currently need about 40 + megabytes of free disk space and bandwidth that you do not + mind sharing (you probably want enough to spare). + + I need to be able to rsync to your machine from the main CVS + server. The preferred method to rsync is to setup ssh in your + machine. + + The requirements are: + <ul> + * An account where we can ssh into. + + * rsync. + + * AnonCVS setup with the same paths as the rest of the + servers. + + * Currently, about 40 megabytes of disk space, but this + will likely grow as the project evolves. + + * A sysadmin contact e-mail address. + </ul> diff --git a/web/asp-net b/web/asp-net new file mode 100755 index 00000000000..01ce341ee29 --- /dev/null +++ b/web/asp-net @@ -0,0 +1,121 @@ +* ASP.NET + + ASP.NET support is divided in two pieces: + <ul> + * Web Forms (Web Applications infrastructure). + + * Web Services (the SOAP-based rpc system). + </ul> + + There is work underway for both systems. The Web Forms + support is more advanced at this point, and various ".aspx" + programs can be run using the Mono runtime (embedded into + either the XSP server or the mod_mono Apache module). + + We are now working bug fixing and adding missing features + after making the whole pipeline compatible with MS. + + Tim started work on the Web Services. Although we have a + SoapFormatter as part of the remoting infrastructure already + (contributed by Jesus), most people will be using the ASP.NET + Web Services support. Work for the supporting class libraries + just started recently. + +** HttpRuntime + + Patrik has authored most of the HttpRuntime support (both on + the System.Web and on the foundation). + + We are currently working on this. + +** XSP + + This is where initial development of the .aspx/.ascx/.asax compiler + to C# took place. That compiler is now integrated in System.Web classes + mostly under System.Web.Compilation namespace. + + We added a new web server that works with mono and MS runtime and is + being used to debug our classes. It resides in xsp/server. A couple of + classes of this new server can be reused/extended to make an apache + module/cgi using mono (MonoWorkerRequest and MonoApplicationHost). + + There is also a bunch of .aspx pages to test the server along with + a few user controls under xsp/test. + + You can check it out from CVS and run 'make install' to test it. + +** Controls + + A lot of work has been put in the various classes that + implement the controls (UI.HtmlControls and UI.WebControls), + but they have been coded mostly in the dark, and without being + able to test them in real life: Gaurav and Leen worked very + hard on this namespace. + + We can now render all HtmlControls and almost all WebControls. + DataGrid and DataList controls are being finished by Gaurav. + Xml control needs some work on System.Xml related to XSL. + +** Extending ASP.NET + + Currently you have to reference in your ASP.NET the control + and all of its properties, which works fine if you have a GUI + designer, but is harder for people used to develop using text + editors. + + Since we have a parser, we could extend this parser to allow + people to still use ASP.NET controls, using a simpler syntax. + For example people doing blogs and editing their templates + over the web probably do not want to use direct ASP.NET but a + wrapper around it. + +* Web Forms: The pieces (historical) + + There are a couple of components to the puzzle: + + <ul> + * .aspx page parser (converts .aspx to C# code). + + * System.Web.HttpRuntime support. + + * Web controls (System.Web.UI.HtmlControls and + System.Web.UI.WebControls). + + * Underlying infrastructure for the controls (System.Web.UI). + + * HttpRuntime.ProcessRequest is the core of the ASP.NET + implementation. + </ul> + + + Gonzalo has been working on an ASP.NET parser that takes .aspx + files and generated the code required to run them (the code lives in + module `xsp' along with a little web server for testing). + + Most of the runtime support was written by Patrik Torstensson + (now at Intel). This was interesting, because in order to implement + some of its features, Patrik had to go into the runtime/JIT engine and + he spent a few weeks doing work there. + + The classes for running ASP.NET are being actively written. + Gaurav, Leen and Patrik worked in the core of the classes + required to run ASP.NET web application as well as a small + embeddable web server. + + Duncan got our System.Web assembly to compile. + +** How to Help + + Testing and fixing HtmlControls, WebControls and validators is an + easy way to help. + + In the CVS module XSP you can find a small web server used for + testing and a directory containing sample aspx pages. + + You have some documentation under doc directory and in the README + file of each directory. They explain how to test our System.Web. + Testing is really easy! + + As the server also works with MS runtime, you can use it to check + what the expected results are. + diff --git a/web/books b/web/books new file mode 100644 index 00000000000..d5933e79836 --- /dev/null +++ b/web/books @@ -0,0 +1,37 @@ +* C# Books + + A Programmer's Introduction to C# - Second Edition: Eric Gunnerson + +* Remoting + + <a href="http://www.dotnetremoting.cc/book/AdvancedDotNetRemoting.asp"> + Advanced .NET Remoting: Ingo Rammer</a> + +* Compiler Implementation + + Compilers - Principles, Techniques, and Tools: Alfred V. Aho, Ravi Sethi, + Jeffrey D. Ullman + + Advanced Compiler Design Implementation: Steven S. Muchnick + + Modern Compiler Implementation in C: Andrew W. Appel + + A Retargetable C Compiler - Design and Implementation: C. Fraser, David + Hanson + +* Reference Manuals + + <a + href="http://developer.intel.com/design/pentium/manuals/24319101.pdf">Intel + Architecture Software Developer's Manual, Volume 2 - Instruction Set Reference Manual</a> + + <a + href="http://www.caldera.com/developers/devspecs/abi386-4.pdf">System V ABI + - i386 Architecture Processor Supplement</a> + + <a + href="http://www.caldera.com/developers/devspecs/mipsabi.pdf">System V ABI - + MIPS Processor supplement</a> + + <a href="http://www.sparc.org/standards/V8.pdf">The SPARC Architecture + Manual Version 8</a>
\ No newline at end of file diff --git a/web/c-sharp b/web/c-sharp new file mode 100644 index 00000000000..9d3499732e6 --- /dev/null +++ b/web/c-sharp @@ -0,0 +1,207 @@ +* MCS: The Ximian C# compiler + + MCS is currently able to compile itself and many more C# + programs (there is a test suite included that you can use). + It is routinely used to compile Mono, roughly half a million + lines of C# code. + + We are in feature completion mode right now. There are still + a couple of areas that are not covered by the Mono compiler, but + they are very very few at this point (security attributes), + you can also browse the MCS <a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FMCS&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">bugs</a> from Bugzilla. + + A test suite is maintained to track the progress of + the compiler and various programs are routinely compiled and + ran. + +** Slides + + Slides for the Mono C# Compiler presentation at .NET ONE are + available <a + href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/Mono_C_Sharp_Overview_1007.sxi">here</a> + in StarOffice format. + +** Obtaining MCS + + The Mono C# compiler is part of the `mcs' module in the Mono CVS + you can get it from our <a href="anoncvs.html">Anonymous CVS</a> server, + or you can get nightly <a href="download.html">download page</a>. + +** Running MCS + + MCS is written in C# and uses heavily the .NET APIs. MCS runs + on Linux with the Mono runtime and on Windows with both the + .NET runtime and the Mono runtime. + +** Reporting Bugs in MCS + + When you report a bug, try to provide a small test case that would + show the error so we can include this as part of the Mono C# regression + test suite. + + If the bug is an error or a warning that we do not flag, write + a sample program called `csXXXX.cs' where XXXX is the code number + that is used by the Microsoft C# compiler that illustrates the + problem. That way we can also do regression tests on the invalid + input. + +** Phases of the compiler + + The compiler has a number of phases: + + <ul> + * Lexical analyzer: hand-coded lexical analyzer that + provides tokens to the parser. + + * The Parser: the parser is implemented using Jay (A + Berkeley Yacc port to Java, that I ported to C#). + The parser does minimal work and syntax checking, + and only constructs a parsed tree. + + Each language element gets its own class. The code + convention is to use an uppercase name for the + language element. So a C# class and its associated + information is kept in a "Class" class, a "struct" + in a "Struct" class and so on. Statements derive + from the "Statement" class, and Expressions from the + Expr class. + + * Parent class resolution: before the actual code + generation, we need to resolve the parents and + interfaces for interface, classe and struct + definitions. + + * Semantic analysis: since C# can not resolve in a + top-down pass what identifiers actually mean, we + have to postpone this decision until the above steps + are finished. + + * Code generation: The code generation is done through + the System.Reflection.Emit API. + </ul> + +** CIL Optimizations. + + The compiler performs a number of simple optimizations on its input: + constant folding (this is required by the C# language spec) and + can perform dead code elimination. + + Other more interesting optimizations like hoisting are not possible + at this point since the compiler output at this point does not + generate an intermediate representation that is suitable to + perform basic block computation. + + Adding an intermediate layer to enable the basic block + computation to the compiler should be a simple task, but we + are considering having a generic CIL optimizer. Since all the + information that is required to perform basic block-based + optimizations is available at the CIL level, we might just skip + this step altogether and have just a generic IL optimizer that + would perform hoisting on arbitrary CIL programs, not only + those produced by MCS. + + If this tool is further expanded to perform constant folding + (not needed for our C# compiler, as it is already in there) + and dead code elimination, other compiler authors might be + able to use this generic CIL optimizer in their projects + reducing their time to develop a production compiler. + +** History + + MCS was able to parse itself on April 2001, MCS compiled itself + for the first time on December 28 2001. MCS became self hosting + on January 3rd, 2002. + + The Mono Runtime and the Mono execution engine were able to make + our compiler self hosting on March 12, 2002. + +** Questions and Answers + +Q: Why not write a C# front-end for GCC? + +A: I wanted to learn about C#, and this was an exercise in this + task. The resulting compiler is highly object-oriented, which has + lead to a very nice, easy to follow and simple implementation of + the compiler. + + I found that the design of this compiler is very similar to + Guavac's implementation. + + Targeting the CIL/MSIL byte codes would require to re-architecting + GCC, as GCC is mostly designed to be used for register machines. + + The GCC Java engine that generates Java byte codes cheats: it does + not use the GCC backend; it has a special backend just for Java, so + you can not really generate Java bytecodes from the other languages + supported by GCC. + +Q: If your C# compiler is written in C#, how do you plan on getting + this working on a non-Microsoft environment. + + We will do this through an implementation of the CLI Virtual + Execution System for Unix (our JIT engine). + + Our JIT engine is working for the purposes of using the compiler. + The supporting class libraries are being worked on to fully support + the compiler. + +Q: Do you use Bison? + +A: No, currently I am using Jay which is a port of Berkeley Yacc to + Java that I later ported to C#. This means that error recovery is + not as nice as I would like to, and for some reason error + productions are not being caught. + + In the future I want to port one of the Bison/Java ports to C# for + the parser. + +Q: Should someone work on a GCC front-end to C#? + +A: I would love if someone does, and we would love to help anyone that + takes on that task, but we do not have the time or expertise to + build a C# compiler with the GCC engine. I find it a lot more fun + personally to work on C# on a C# compiler, which has an intrinsic + beauty. + + We can provide help and assistance to anyone who would like to work + on this task. + +Q: Should someone make a GCC backend that will generate CIL images? + +A: I would love to see a backend to GCC that generates CIL images. It + would provide a ton of free compilers that would generate CIL + code. This is something that people would want to look into + anyways for Windows interoperation in the future. + + Again, we would love to provide help and assistance to anyone + interested in working in such a project. + +Q: What about making a front-end to GCC that takes CIL images and + generates native code? + +A: I would love to see this, specially since GCC supports this same + feature for Java Byte Codes. You could use the metadata library + from Mono to read the byte codes (ie, this would be your + "front-end") and generate the trees that get passed to the + optimizer. + + Ideally our implementation of the CLI will be available as a shared + library that could be linked with your application as its runtime + support. + + Again, we would love to provide help and assistance to anyone + interested in working in such a project. + +Q: But would this work around the GPL in the GCC compiler and allow + people to work on non-free front-ends? + +A: People can already do this by targeting the JVM byte codes (there + are about 130 compilers for various languages that target the JVM). + +Q: Why are you writing a JIT engine instead of a front-end to GCC? + +A: The JIT engine and runtime engine will be able to execute CIL + executables generated on Windows. + +You might also want to look at the <a href="faq.html#gcc">GCC</a> +section on the main FAQ diff --git a/web/ccvs b/web/ccvs new file mode 100644 index 00000000000..0363baa368d --- /dev/null +++ b/web/ccvs @@ -0,0 +1,194 @@ +* CVS Access + + If you are an active Mono developer, you can get a CVS account + that hosts the Mono source code. This web page contains + details about how to use the CVS server as well as the + policies to use it. + + If you are not a developer, but want to track the development, please + see the <a href="anoncvs.html">AnonCVS</a> instructions. + + Send an e-mail to miguel with your public OpenSSH key for this + purpose. Please specify if the key was generated with SSH version 1 + or version 2. + +* Policies + + Here are some policies about the use of the Mono CVS server. + +** Code License + + If you are about to commit code to a module, the code that is + being commited should be released under the same license as + the code that the module has. + + Check the license if you are unsure, but it is basically: + class libraries X11; compiler and tools: GPL; runtime: LGPL. + + If in doubt, check with the maintainers of the module, or send + mail to mono-hackers-list@ximian.com. + +** Commiting code. + + If you are the maintainer for a piece of code, feel free to + commit code, and delegate the work to others. + + Use ChangeLog entries so we can keep textual descriptions of + your work, and use the contents of your ChangeLog file as the + CVS commit message (ie, paste the contents of this into the + editor buffer). + + If you are making changes to someone else's code, please make + sure you get in touch with the maintainer of that code before + applying patches. You want to avoid commiting conflicting + work to someone else's code. + + Please do not commit code that would break the compile to the + CVS, because that normally wastes everybody's time. Two things + are important in this step: trying to build your sources and making + sure that you add all the new files before you do a commit. + + +* Using CVS. + + This is a small tutorial for using CVS. + +** Generating an SSH key + + If you are using SSH version 2, please generate your key using: + +<pre> + ssh-keygen -t rsa +</pre> + + And mail me the id_rsa.pub file. + + If you are using SSH version 1, run: +<pre> + ssh-keygen +</pre> + + And mail me your identity.pub file. + + If you are using SSH from SSH Communications Security (they offer + a free SSH client for personal use), you have to use OpenSSH to + convert your public key to the required format. You have to use + OpenSSH's ssh-keygen program and write the following: + +<pre> + ssh-keygen -i -f id_XXX.pub > my_public_key.pub +</pre> + + where the file id_XXX.pub is your public key file, + normally located under ~/.ssh/ or ~/.ssh2/. + Send to miguel the my_public_key.pub file. + + The *exact* format for this file must be: + +<pre> + ssh-rsa XXXXX.... +</pre> + + You will need CVS and SSH. Windows users can get both by + installing Cygwin (<a + href="http://www.cygwin.com">http://www.cygwin.com</a>) + + Unix users will probably have those tools installed already. + +** Checking out the sources + + To check out the sources for the first time from the + repository, use this command: + +<pre> + export CVS_RSH=ssh + export CVSROOT=username@mono-cvs.ximian.com:/cvs/public + cvs -z3 co mcs mono +</pre> + +** Updating your sources + + Every day people will be making changes, to get your latest + updated sources, use: + +<pre> + cvs -z3 update -Pd mcs mono +</pre> + + Note: The '-z3' enables compression for the whole cvs action. + The '-Pd' makes the update operation (P)rune directories that + have been deleted and get new (d)irectories added to the + repository. + +** Making patches + + Usually you will want to make a patch to contribute, and let + other people review it before commiting it. To obtain such a + "patch", you type: + +<pre> + cd directory-you-want-to-diff + cvs -z3 diff -u > file.diff + mail mono-list@ximian.com < file.diff +</pre> + +** Keeping track of changes. + + We provide two e-mail based mechanisms to keep track of + changes to the code base: + + <ul> + * <a href="mailto:mono-patches-request@ximian.com"> + mono-patches@ximian.com</a>: This mailing list receives + in patch form all the changes that are being made to the + CVS. + + * <a href="mailto:mono-cvs-list-request@ximian.com"> + mono-cvs-list@ximian.com</a>: This mailing list only + receives the CVS commit logs with a list of files + modified. + </ul> + + We hope to offer LXR and Bonsai in the future as well. + +** Commiting your work + + Once you get approval to commit to the CVS, or if you are + commiting code that you are the maintainer of, you will want + to commit your code to CVS. + + To do this, you have to "add" any new files that you created: + +<pre> + cvs add new-file.cs +</pre> + + And then commit your changes to the repository: + +<pre> + cvs commit file-1.cs file-2.cs +</pre> + +* The Mailing Lists + + To keep track of the various development and changes to the + CVS tree, you can subscribe to the mono-cvs-list@ximian.com. + To subscribe, send an email message to + mono-cvs-list-request@ximian.com and in the body of the + message put `subscribe'. + + This will send you an email message every time a change is + made to the CVS repository, together with the information that + the author of the changes submitted. + + You might also want to track the live changes, subscribe to + the <a + href="mailto:mono-patches-request@ximian.com">mono-patches@ximian.com</a> + to receive the patches as they are checked into CVS. + +** Recommendations + + To build the sources, most of the type trying the `make' command + is enough. In some cases (the class libraries) we use nant, so + you need to run nant manually. + diff --git a/web/class-library b/web/class-library new file mode 100644 index 00000000000..95b56cacf9d --- /dev/null +++ b/web/class-library @@ -0,0 +1,190 @@ +* The Class Library + + The Class Library should be compatible with Microsoft's .NET + implementation. + + Please see the <a href="class-status.html">Class Status</a> + page for a status of who is working on which classes. + + We will write as much code as possible in C#. We may need to + interface with code written in C to gain access to the + functionality of libraries like libart, Gtk+, and libc. + +** Contributing + + We welcome contributions to the the Class Library. To get + started, check the status page for information about which + APIs are being worked on, and how to get in touch with + individual maintainers. + + If you want to work on a class, first check the <a + href="download.html">Classes Distribution</a> to see if it is + not implemented yet, if not, check the <a + href="class-status.html">Class Status</a> to see if someone is + already working on it, and maybe contact them. + + If nobody is working on it, mail <a + href="mailto:mono-list@ximian.com">mono-list@ximian.com</a> + with the class you want to implement and CC <a + href="mailto:miguel@ximian.com">miguel@ximian.com</a>. + + You can also track live the activities of the Mono CVS module + by subscribing to the <a + href="http://lists.ximian.com/mailman/listinfo/mono-cvs-list">mono-cvs-list</a> + + +** Missing features + + Our class libraries miss some features, for example, most classes + do not implement the serialization bits at all, it would be a good + contribution to add this to each class. + + This is a simple task, but it needs to be done in a compatible way + with the Microsoft.NET classes: using the same arguments to serialize + and reincarnate data. + +** Layout + + The Class Library resides in the `mcs' module in the directoy + `class'. + + Each directory in the directory represents the assembly where + the code belongs to, and inside each directory we divide the + code based on the namespace they implement. + + There are two cases when we should consider portability: when + we are dealing with a couple of classes only that differ from + system to system (Consider System.Net and System.IO for Win32 + and Unix). In those cases we will just place the files for + example on <t>corlib/System/System.IO/Unix-Console.cs</t> and + <t>corlib/System/System.IO/Win32-Console.cs</t>. + + For classes that might differ more (for example, the + implementation of Windows.Forms), we might have different + directories altogether: <t>System.Windows.Forms/Win32</t>, + <t>System.Windows.Forms/Gtk+</t> and + <t>System.Windows.Forms/Cocoa</t>. + +** Using existing components from GNOME. + + Our current plan is to implement the GUI tools on top of + Gtk+. The only obstacle here is that applications from Windows + might expect to be able to pull the HWND property from the + widgets and use PInvoke to call Windows functions. + +** Class Library and Win32 dependencies. + + There are a few spots where the Win32 foundation is exposed to + the class library (for example, the HDC and HWND properties in + the GDI+). Casual inspection suggests that these can be + safely mapped to Gdk's GC and GdkWindow pointers without + breaking anything. + + The only drawback is that support for PInvoke of Win32 code + won't be available. An alternate solution would be to use + portions of Wine, or even to use Wine as our toolkit. + +*** Initial GDI+ and WinForms implementation + + The initial implementation will use Gtk+ as the underlying + toolkit. Since GTK+ has already been ported to many windowing + systems other than X (including frame buffer, Win32, and BeOS) + its use should cover most applications for most users. + +*** Database access + + We will implement ADO.NET functionality by reusing <a + href="http://www.gnome-db.org">GNOME-DB</a>. This is an ideal + choice, since GNOME-DB was implemented precisely to provide an + ADO-like system for GNOME. + +*** Component Integration + + We will provide a new namespace to use GNOME specific features + as well as a namespace to host Bonobo interfaces and classes + in Mono. + +** Licensing + + The class library is being licensed under the terms of the + <a + href="http://www.opensource.org/licenses/mit-license.html">MIT + license.</a> This is the same license used by the X11 window + system. + +** Class Library testing + + We need to write regression tests that will verify + the correctness of the class library, compiler, and JIT + engine. + + Please write your regression tests using <a + href="http://nunit.sourceforge.net">NUnit</a> + +** Coding conventions + + Please follow the conventions on the ECMA specification (On + the Annex Partition) for your coding your libraries. + + Use 8 space tabs for writing your code (hopefully we can keep + this consistent). If you are modifying someone else's code, try + to keep the coding style similar. + + For a rationale on 8 space tabs, read Linus Torvald's Coding + Style guidelines in the Linux kernel source for a rationale. + +*** Missing implementation bits + + If you implement a class and you are missing implementation bits, + please put in the code the word "TODO" and a description of what + is missing to be implemented. + +*** Tagging buggy code + + If there is a bug in your implementation tag the problem by using + the word "FIXME" in the code, together with a description of the + problem. + + Do not use XXX or obscure descriptions, because otherwise people + will not be able to understand what you mean. + +*** Tagging Lame specs + + Sometimes the specification will be lame (consider Version.ToString (fieldCount) + where there is no way of knowing how many fields are available, making the API + not only stupid, but leading to unreliable code). + + In those cases, use the keyword "LAMESPEC". + +** Namespaces + + We are using a number of namespaces in the class libraries for + private classes when we need them, you are encouraged to use these: + +<pre> +Mono + .Languages // General Compiler classes + .CSharp // Specific C# parsing/tokenizing classes + .MonoBASIC // Specific VB.NET/MonoBASIC parsing/tokenizing classes + .Python // Specific Python parsing/tokenizing classes + .Runtime + .LateBind // General latebinding-support for MonoBASIC/Python + .MonoBASIC // Specific runtime classes for MonoBASIC programs + .Python // Specific runtime classes for Python programs + .Web + .UI + .Utils // Gaurav utility classes +</pre> + +** FAQ + +Frequently asked questions about the class library: + +Q: I am writing a new class that overrides one of the system classes, + and I am getting a 1595 warning from the compiler. Should we use a + different namespace? + +A: There is a quick solution to the problem, you can pass the command + line argument /nowarn:1595 and this will effectively let you use + your implementation of the code, while overriding the ones from the + system assemblies.
\ No newline at end of file diff --git a/web/class-status.in b/web/class-status.in new file mode 100644 index 00000000000..8fb7114daa5 --- /dev/null +++ b/web/class-status.in @@ -0,0 +1,51 @@ +* Status of the various pieces of the class library + + Classes in Mono are organized by the assembly that they belong to. + + Here is the status of the different assemblies: + <ul> + <li><a href="http://www.go-mono.com/class-status-corlib.html">corlib</a>: The core library. + <li><a href="http://www.go-mono.com/class-status-System.html">System</a>. + <li><a href="http://www.go-mono.com/class-status-System.Xml.html">System.Xml</a>. + + <li><a + href="http://www.go-mono.com/class-status-System.Data.html">System.Data</a>: + Database access functionality (also check the <a href="ado-net.html">Mono ADO.NET status</a> pages). + + <li><a href="http://www.go-mono.com/class-status-System.Drawing.html">System.Drawing</a>. + + <li><a + href="http://www.go-mono.com/class-status-System.Web.html">System.Web</a>: + ASP.NET classes, also check the <a href="asp-net.html">Mono ASP.NET status pages</a> + + <li><a href="http://www.go-mono.com/class-status-System.Web.Services.html">System.Web.Services</a>. + + <li><a + href="http://www.go-mono.com/class-status-Microsoft.VisualBasic.html">Microsoft.VisualBasic</a>: + Support runtime for Visual Basic applications + + <li><a + href="http://www.go-mono.com/class-status-System.Windows.Forms.html">Windows.Forms</a>: + there is also a <a + href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mailing + list available</a> + + <li><a href="http://www.go-mono.com/class-status-System.EnterpriseServices.html">EnterpriseServices</a>. + + <li><a + href="http://www.go-mono.com/class-status-System.Runtime.Serialization.Formatters.Soap.html">System.Runtime.Serialization.Formatters.Soap</a>. + + + </ul> + +* List of not-implemented classes + + Pick from the list of assemblies in the menu on the left to + view the current status of that assembly. + + The tree shows items that are either missing or that have TODO + attributes associated with them. + You can use the checkboxes to show only missing or only TODO items. + + Clicking on a name will take you to the <a href="http://msdn.microsoft.com/">MSDN documentation</a> for that item. + CTRL-Clicking will take you to the <a href="http://cvs.hispalinux.es/cgi-bin/cvsweb/?cvsroot=Mono">mono CVS tree</a>. diff --git a/web/classlib-doc b/web/classlib-doc new file mode 100644 index 00000000000..19f92d6dfcf --- /dev/null +++ b/web/classlib-doc @@ -0,0 +1,62 @@ +* Class Library Documentation + +** Summary + + While using inline XML tags to document classes is certainly + convenient, properly verbose documentation quickly overwhelms + the code, making the source quite difficult to read. Furthermore, + multilingual documentation makes for significant additional text. + + With these considerations in mind, Mono will use external XML files + for type documentation, rather than documenting the source inline. + + Several tools will be created for managing, verifying, generating, + and updating class library documentation, including: + + <ul> + <li><a href="#monodoc">MonoDoc - A graphical documentation editor and viewer.</a></li> + <li><a href="#mkmaster">MkMaster - A command line tool to feed stub information to MonoDoc.</a></li> + <li><a href="#aspnet">An ASP.NET documentation editor.</a></li> + <li><a href="#xsltool">An xsl tool to convert monodoc xml to html documentation.</a></li> + </ul> + +** XML Documentation Files and Formats + + +*** Monodoc XML + This XML is Mono's documentation format. Documentation and a DTD/Schema + for Monodoc XML is located in cvs and can be found <a href="http://go-mono.org/monodoc.dtd">here</a>. + + This XML could be generated by MonoDoc or the ASP.NET client. + + More about the XML format <a href="http://go-mono.org/monodoc-xml.html">here</a>. +** Documentation Tools + +*** <a name="monodoc">MonoDoc</a> + A graphical documentation editor and viewer. Currently, MonoDoc + consists of a Qt# application and is in heavy development. + +*** <a name="mkmaster">MkMaster</a> + This tool creates the Master.xml file that MonoDoc uses as a reference + for documentation generation. This is a reflection engine that is used + to gather metadata from assemblies and create an xml representation. + +*** <a name="aspnet">ASP.NET</a> + This tool is planned. + +*** <a name="xsltool">An XSL converter</a> + This tool is planned. If someone wants to step forward and adopt this + project, it would be very helpful ;) + +** Status and Roadmap + +*** 16, September 2002 + +A preliminary version of MonoDoc is in Mono's cvs. It is under heavy development. +Once this is complete we will start documenting the API! + +** Get Involved + + Help us develop Mono's documentation tools! Subscribe to + <a href="http://lists.ximian.com/mailman/listinfo/mono-docs-list">mono-docs-list</a> + and wade right in. diff --git a/web/contact b/web/contact new file mode 100644 index 00000000000..d9bbda12540 --- /dev/null +++ b/web/contact @@ -0,0 +1,13 @@ +* Contacting the Mono team. + + You can contact the general forum of discussion by sending + e-mail to <a href="mailto:mono-list@ximian.com">mono-list@ximian.com</a> + + You can contact me (Miguel de Icaza) by sending e-mail to <a + href="mailto:miguel@ximian.com">miguel@ximian.com</a>. My web + page is <a + href="http://primates.ximian.com/~miguel">http://primates.ximian.com/~miguel"</a> + + You can also <a + href="http://www.ximian.com/about_us/contact/">reach Ximian.</a> + diff --git a/web/contributing b/web/contributing new file mode 100644 index 00000000000..3a363d85ebf --- /dev/null +++ b/web/contributing @@ -0,0 +1,227 @@ +* Contributing to the Mono project + + Mono has not been completed yet. It is a project under + active development and with a vibrant community. If you are + looking at ways of helping the project, you have come to the + right web page. + + There are three different philosophical approaches to helping + the Mono project, the selfish way, the altruistic or the + educational way. + + The <b>selfish</b> way is packed with adventure. You start by + building your own software, and start using the compiler and + tools that come with Mono. Eventually you will run into + missing features, or a bug in the software. Since we ship all + the source code for Mono, you can start tracking down the + problem. Depending on how much time you have to devote to the + problem you could: <a href="http://bugzilla.ximian.com">File a + bug report</a>; track down the problem and provide a better + <a href="http://bugzilla.ximian.com">bug report</a>; fix the + bug and provide a patch (you can <a + href="mailto:mono-list@ximian.com">post it</a> to the <a + href="http://lists.ximian.com/mailman/listinfo/mono-list">mono + mailing list</a>; or discuss the solution on the mailing + list. Ideally you will also write a <a + href="testing.html">regression test</a> so the bug does not + get re-introduced in the future. + + The <b>altruistic</b> is probably the easiest because you get + to pick a piece of Mono that you might want to work on. You + can pick an unfinished <a href="class-library.html">class</a> (from our <a + href="class-status.html">class status page</a>); help with the + <a href="documentation.html">documentation effort</a> (<a + href="http://lists.ximian.com/mailman/listinfo/mono-docs-list">mailing + list for the documentation effort</a>); fix existing <a + href=http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FClass+Libraries&product=Mono%2FRuntime&component=CORLIB&component=misc&component=System&component=System.Web&component=System.XML&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">runtime + bugs</a>; <a + href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FMCS&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">compiler + bugs</a>; help with the <a href="tools.html">tools</a> or + writing <a href="testing.html">tests</a> that help make Mono + more robust or help with the <a + href="http://www.go-mono.com/winforms.html">Winforms + effort</a>. + + The <b>educational</b> way is an interesting one, because you + pick a technology you are interested in, and work on that + technology to learn the technology. + + Those are just broad things that need to be worked on, but + something that would help tremendously would be to help with + small duties in the project that need to be addressed. + + You can see what needs to be done in the class libraries <a href="class-status.html">here</a> + +* IRC Channel + + Many developers get together on the <b>#mono</b> irc channel + on the <b>irc.gnome.org</b> server. + +** To start contributing + + As a programmer, you can contribute in three different scenarios to Mono: + + <ul> + * If you only have Linux/Unix. + * If you only have Windows. + + * If you have both Linux and Windows. + </ul> + + You might also want to check our <a href="#setup">common + setups</a> section that describes some common setups that people + use while working on Mono. + +*** Contributing to the class library, regression tests or the compiler + + This only requires Windows currently. + + To start developing classes or to contribute to the compiler, + you only need Windows and the .NET Framework 1.0 SDK. Please notice + that you do not need Visual Studio (although you can use it if + you want). The .NET Framework SDK requires some version of + Windows XP or Windows NT. If you are running Windows 98, 95 + or Me, you could use instead the <a + href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/829/msdncompositedoc.xml">.NET Redist package</a>, but it + lacks the documentation browser and the ildasm program (C#, VB, JScript and IL + assembler are included). + + You can get it <a href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a> + + If you are new to .NET, writing regression tests is a good way + of starting to contribute: it will help you get used to C# as + well as getting comfortable with the .NET APIs. + + This helps because at this point you might be the best + qualified person to fix a problem found by the regression + test, or you might have a new class to implement in the .NET + world that only has a test suite. + + To get started writing tests see the <a href="testing.html">Test Suite</a> + section. <a href="mono-contribution-howto.html">Here</a> there is a good All-In-One introduction to the art of writing tests. + + +*** Contributing to the runtime engine + + This only requires Linux, currently some tasks are easier if you + have access to Windows as well. + + Here are a few things you can do: + <ul> + * Port the runtime to other architectures. + * Port the runtime to other operating systems. + * Finish the IL code verifier in the runtime. + * Hack the JIT, improve the code generator, add new + pattern rules, improve the register allocator. + * Implement the debugging interfaaces + </ul> + +** Bug reporting + + If you find bugs in Mono, please make sure you enter a bug + report so we can keep track of problems in Mono. + + To enter bug reports go to <a href="http://bugzilla.ximian.com"> + http://bugzilla.ximian.com</a> and enter bug reports against + your favorite component (Mono, Runtime, C# compiler). + + You can review the list of current bugs by going <a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FClass+Libraries&product=Mono%2FMCS&product=Mono%2FRuntime&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&order=%27Importance%27&form_name=query">here</a> + +** Small tasks + + A few smaller tasks are here, dropped in no particular order: + <ul> + * <b>Mono/doc and web site:</b> They need to be + packaged up in the official `distribution' + + * Adding serialization support to all the classes. + + We have many classes, but we have not implemented in + many cases the serialization and re-incarnation support in + them (this is pretty straight forward code, and simple, + but there is a lot to be done here). + </ul> + +* Emacs support + + Brad Merryl's C# mode for Emacs is available: <a + href="http://www.cybercom.net/~zbrad/DotNet/Emacs/">http://www.cybercom.net/~zbrad/DotNet/Emacs/</a> + +* Books on C# and DotNet. + + <ul> + * Dotnet Books (<a href="http://www.dotnetbooks.com">http://www.dotnetbooks.com</a>) + + * Dotnet Resources (<a href="http://www.dotnetexperts.com/resources/"> + http://www.dotnetexperts.com/resources</a>) + + * O'Reilly C# Essentials (<a href="http://www.oreilly.com/catalog/csharpess/"> + http://www.oreally.com/catalog/csharpess</a>) + + * O'Really .NET Essentials (<a href="http://www.oreilly.com/catalog/dotnetfrmess/"> + http://www.oreally.com/catalog/dotnetfrmess</a>) + </ul> + +<a name="setup"> +* Common Setups + + People running both Linux and Windows while contributing to + Mono use a number of tricks to increase their productivity. + + Scenarios: + + <ul> + * <b>Linux host and Windows host</b> + + The Windows file system is shared (right click on + your hard drive icon, and select sharing, allow this + to be shared). + + The Windows machine has the required build tools + (cygwin, and the .NET framework). On the Windows + machine, you want to setup the ssh server (run the + ssh-host-config program to configure your ssh) and + run it (from a cygwin terminal, type: /usr/sbin/sshd). + + From the Linux side, you want to mount the Windows + file system, using something like this: + +<tt><pre> + mount -t smbfs -o uid=miguel,username="Miguel de Icaza" "//quack/c$" /mnt +</pre></tt> + + In the above example, my Linux user name is + `miguel', and this will allow this user to have + read/write access to the share. + + The host name is `quack', and the name of the share + is `c$' (that is the C: partition). + + The file system is accessible on /mnt. + + You can perform your cvs update and cvs commits from + the /mnt directory, and run Emacs or your favorite + Linux text editor on the Unix side in this way. + + Then from another terminal, you can ssh into your + Windows box using ssh, like this: ssh "Miguel de Icaza@quack" + </ul> + +* Special Note + + If you have looked at Microsoft's implementation of .NET or + their shared source code, you may not be able to contribute + to Mono. Details will follow when we know more about this. + + In general be careful when you are implementing free software + and you have access to proprietary code. We need to make sure + that we are not using someone else's copyrighted code + accidentally. + + Please do not use the <b>ildasm</b> program to disassemble + proprietary code when you are planning to reimplement a class + for Mono. If you have done this, we might not be able to use + your code. + + Please stick to published documentation for implementing any + classes. diff --git a/web/crypto b/web/crypto new file mode 100644 index 00000000000..5a5ca7f6830 --- /dev/null +++ b/web/crypto @@ -0,0 +1,275 @@ +* Cryptography + + In the .NET framework cryptography can be found under a number of + namespaces in several assemblies. + +** Assembly: corlib + +*** Namespace: <b>System.Security.Cryptography</b> + + Thanks to the work of many people this namespace is almost complete. + +**** Status + <ul> + * Every classes are present. + + * Most classes have their unit tests. Some tests like <code> + SymmetricAlgorithmTest</code> are generated by an external + tool. + </ul> + +**** TODO + <ul> + * Support for adding/modifying algorithms and OID using the + <code>machine.config</code> configuration file (in progress). + + * RNGCryptoServiceProvider is currently only working on Linux. + The current implementation reside in Mono's runtime and use + the <code>/dev/[u]random</code> device (which do not exists + under Windows). A Windows alternative is in the work... + + * Keypair persistance for RSA and DSA. This persistance must + somehow be linked with X509 certificate stores (in planning). + + * <code>PasswordDeriveBytes</code> is currently limited to + generating keys with the maximum length equals to the hash + output (as specified in PKCS #5). However the framework + implementation allows for longer keys to be generated. Also + the algorithms used by CryptDeriveKey (used by Windows + applications) are unknown. + + * Analyse the current coverage of the unit tests on the + cryptographic classes and complete the unit tests. + + * Optimizations (performance) on most class are possible. Some + have been done using the Community Edition of BoundChecker + (a free VisualStudio addon) - recommanded! + </ul> + +**** Notes + <ul> + * All cryptographic algorithms are entirely managed, including + classes named <code>*CryptoServiceProvider</code>, with the + exception of <code>RNGCryptoServiceProvider</code> (which + resides in the runtime). + </ul> + + +*** Namespace: <b>System.Security.Cryptography.X509Certificates</b> + +**** Status + <ul> + * X.509 certificates are parsed using 100% managed code. + + * Software Publisher Certificates (SPC) used by Authenticode + (tm) to sign assemblies are supported (extraction from PE + files) but <b>not</b> validated. + + * Tests are generated from a set of existing certificates + (about a dozen) each having different properties. Another + set of certificates (more than 300) are used for a more + complete test (but isn't part of the test suite for size + and time consideration). + </ul> + +**** TODO + <ul> + * Authenticode(tm) support is incomplete. We can extract the + certificates from PE files but cannot validate the signature + nor the certificate chain (and we're still missing some trust + anchors). + + * Integration with CryptoAPI (on Windows) isn't possible as + long as the <code>X509Certificate(IntPtr)</code> constructor + isn't completed. + </ul> + +**** Notes + <ul> + * <b>There's no validation of the certificates</b> done in this + class (this isn't a restriction of Mono!). This means that + certificate signatures and validity dates are <b>never</b> + checked! + + * The newer X509Certificate class included in Microsoft's Web + Service Enhancement (WSE) is a little better (as it includes + CryptoAPI's validation) when <code>IsCurrent</code> is called. + + * Microsoft implementation of <code>X509Certificate</code> is + done by using CryptoAPI. From the exceptions thrown + Authenticode(tm) support is done via COM. + </ul> + +<hr> +** Assembly: System.Security + +*** Namespace: <b>System.Security.Cryptography.Xml</b> + + This namespace implements the <a href="http://www.w3.org/TR/xmldsig-core/"> + XML Digital Signature</a> specification from + <a href="http://www.w3.org/">W3C</a>. + +**** Status + <ul> + * All classes are present but some are only stubbed. + + * Most classes have their unit tests. + + * This assembly is present in CVS but only available when + building using NAnt (i.e. makefile are missing). + </ul> + +**** TODO + <ul> + * All the transforms needs to be done. But this requires far + more XML knowledge than crypto. Note: Most tests runs because + the feeded XML is pre-c14n (by hand in the code) before + signing (not because the transforms works). + + * Makefile for building under non-Windows operating systems. + </ul> + +<hr> +** Assembly: Mono.Security.Win32 + + This assembly goal is to provide maximum compatibility with CryptoAPI + to application running with Mono's runtime on the Windows operating + system. + + <b>This assembly should NEVER be used directly by any application</b>. + The classes should only be used by modifying the <code>machine.config + </code> configuration file (and then only if this increased + compatibility is required by an application). + +*** Namespace: Mono.Security.Cryptography + +**** Status + <ul> + * A RNGCryptoServiceProvider built on top of CryptoAPI. + + * Not (yet) commited in CVS - i'm still playing with the base + classes so I can easily add other CryptoAPI-based algorithms. + </ul> + +**** TODO + <ul> + * Unmanaged versions of hash algorithms (SHA1 and MD5). + * Unmanaged versions of symmetric encryption algorithms + (like DES, TripleDES, RC2 and others present in CryptoAPI). + * Unmanaged versions of asymmetric algorithms (like DSA and + RSA) which persist their keypair into the specified CSP. + </ul> + +<hr> +** Assembly: Microsoft.Web.Services + + Microsoft Web Service Enhancement (WSE), known as Web Service + Development Kit (WSDK) in it's beta days, is an add-on the .NET + framework that implements WS-Security (and other WS-* specifications). + It also includes improved support for XML Signature (replacing and/or + extending <code>System.Security.Cryptography.Xml</code>) and X509 + certificates. + + Note: WSE is distributed as an add-on because the WS-Security + specification isn't yet completed by + <a href="http://www.oasis-open.org/committees/wss/">OASIS</a>. + + <b>There are some licensing issues to consider before stating to + implement WS-Security. All contributors must sign an agreement with + Microsoft before commiting anything related to WS-Security into CVS. + </b> + +*** Namespace: Microsoft.Web.Services.Security + +**** Status + <ul> + * Nothing (yet) commited in CVS. + </ul> + +*** Namespace: Microsoft.Web.Services.Security.X509 + +**** Status + <ul> + * Nothing (yet) commited in CVS. + </ul> + +**** TODO + <ul> + * We need to define certificate stores (for both users and + machines). These sames stores must be linked with asymmetric + keypairs. This could also be used to store the SPC roots. + </ul> + +<hr> +** Other stuff + + There are other, not so visible, uses of cryptography both inside and + outside the class library - such as: + + <ul> + * SSL/TLS for secure communication (investigation under way). + + * Assembly signing (and verification) using StrongNames. + + * Assembly signing (and verification) using Authenticode(tm). + </ul> + + +*** Tools + + There are many tools in the .NET framework that indirectly interacts + with some cryptographic classes. Mono will eventually need these tools. + +**** Status + + The following tools are complete: + <ul> + * <code>secutil</code> is a tool to extract certificates and + strongnames from assemblies in a format that can be easily + re-used in source code (C# or VB.NET syntax). + + * <code>cert2spc</code> is a tool to transform multiple X.509 + certificates (a chain) into a Software Publisher Certificate + (SPC) - which is a long name for a simple PKCS#7 file. + </ul> + +**** TODO + The following tools are still missing or incomplete: + <ul> + * <code>monosn</code> is a clone of the <code>sn</code> to manage + strongnames. This tools is part of the runtime (not the class + library) and as such is written in C. + + * <code>signcode</code> and <code>chktrust</code> for signing + and validating Authenticode(tm) signatures on assemblies. + + * <code>makecert</code> to create X.509 test certificates that + can be used (once transformed in SPC) to sign assemblies. + + * Other tools like a, GUI-based, certificate manager... + </ul> + + Note that many of the tools requires the class library and/or the + runtime to be ready for them. + +<hr> +** How to Help + + Complete any of the TODO (and feel good about it ;-). + + Add missing unit tests to classes or methods. + + Write some documentation on the cryptographic classes for MonkeyGuide + (as I'm not a good writer, at least in English, but you must be a good + reader if you got to this part). + + Optimization can also be done on algorithms as crypto is never fast + enough. Just be sure to test every optimization (using the unit test) + carefully - it's so fast to break an algorithm ;-). + + Contact Sebastien Pouliot (<a href="mailto:spouliot@videotron.ca">home</a> + , <a href="mailto:spouliot@motus.com">work</a>) if you need additional + informations about the status of the cryptographic classes. + +<hr> +Last reviewed: January 19, 2003 (post mono 0.18) diff --git a/web/devel-faq b/web/devel-faq new file mode 100644 index 00000000000..9ca89285219 --- /dev/null +++ b/web/devel-faq @@ -0,0 +1,190 @@ +* Developer FAQ + +** New classes + +Q: Should we write classes which are not part of the .NET or ECMA specs? + +A: Yes. The ECMA and .NET specifications are far from complete, and + to produce a complete platform we will need a number of other + classes and components. + + Any new classes that are not part of .NET or ECMA should be + designed to be reusable on anyone's CLI implementation. So that + Windows developers can also use any new classes that we come up + with. + + We have a few existing <a href="ideas.html">Ideas on missing + classes</a> + +** Language Compatibility + +Q: What is the magic that allow multiple languages to co-exist? + +A: From Fergus Henderson: + +<i><blockquote> +There are different levels of interoperability. +The ECMA spec defines different categories of +CLS (Common Language Specification) conformance. +There are also some useful categories that don't +correspond to any of the levels defined in the ECMA spec. +In increasing degree of difficulty, your language implementation +can + + <ul> + * (a) just generate IL + + * (b) be a CLS "consumer", which means that it can read in + meta-data describing component interfaces, + and that it provides a way to declare variables of + CLS-complaint types and to call CLS-complaint methods. + + * (c) be a CLS "extender", which means that it can in addition + derive from CLS-compliant classes + and implement CLS-compliant interfaces + + * (d) be able to produce components with *any* CLS-compliant + component interface. + </ul> + +Supporting some of these may require extending your language. However, +you can get quite a lot of interoperability by just putting appropriate +functionality in your compiler, without extending your language. + +For some things, e.g. ASP.NET, your language implementation also needs to be +able to + + <ul> + * (e) consume CodeDom trees. CodeDom trees are an abstract + representation of programs in a form similar to a C# parse + tree, with embedded code snippets (unparsed strings). + Given a CodeDom tree, with the snippets in your language, + your language implementation needs to generate a (i) .NET + assembly and possibly also (ii) a source file in your language. + + * (f) produce CodeDom trees. For some applications, + your language implementation also needs to be able to + round-trip from CodeDom -> your language -> CodeDom. + </ul> + +and for some things it needs to + + <ul> + * (g) generate *verifiable* IL + </ul> + +So when you hear all the hype about how language XYZ is a +".NET language", make sure you ask which of these different +things are supported. + +[For the record, Mercury currently supports (a). We're working on +(b) and (g), and on parts of (c) and (e). We're never going to do (f), I very +strongly doubt we'll ever do (d), and for (c) we might only ever support +implementing interfaces, not deriving from classes.] + +</blockquote></i> + +** PInvoke + +Q: What are the two major initiatives to implement PInvoke? + +A: Fergus Henderson answers: + +<i><blockquote> +Many of the .NET APIs will need to be implemented using code that calls C/Unix +APIs, such as stat(). The standard way of interfacing with native code from +.NET code is to use "PInvoke". However, there is a difficulty: many of +these APIs are defined in terms of types such as C's `long' or `size_t' +or the Posix `struct stat' whose representation varies depending on the +platform (architecture/OS/C compiler). There's no *portable* way of +accessing those from .NET managed code. + +So, there are a couple of different approaches. +One possibility is to access such routines by writing a wrapper, e.g. in C, +that provides the same functionality without using types with a system-dependent +representation. The wrapper can then be directly accessed from portable +.NET code. The .NET code remains both source- and binary-portable; +the wrapper code is source-portable, but needs to be compiled +seperately for each target platform. The drawback of this approach is +that you have to write a lot of cumbersome wrapper code. + +Another possibility is to extend the .NET VM with support for an +additional custom attribute, e.g. "[PosixType]". The VM would then +represent types tagged with this attribute in the same way that the +underlying system represents those types. With this approach, no +wrapper code would be needed. A drawback of this approach is that it +pushes quite a bit of complexity into the VM; the VM would have to know +the native representation of all types annotated with this attribute. +Another drawback is that code using this extension might not work on +different VMs. + +There have also been some other suggestions, but those are the two that +I think are the best. +</blockquote></i> + +Q: What is the problem implementing PInvoke? + +A: Again, from Fergus Henderson: + +<i><blockquote> +There's no problem implementing PInvoke as specified in the ECMA +specs and/or MS documentation. It's just that PInvoke by itself +doesn't solve all of the problems; in particular it doesn't solve +the problem of C types whose representation is different on different +systems. +</blockquote></i> + +** CVS use + +Q: Why do we keep ChangeLogs and make the CVS commit messages be the + same? One could be generated from the other + +A: There are a number of reasons for keeping ChangeLog files as well as + CVS commit files: + + <ul> + * Offline programming: when people are traveling, CVS logs are + not available. + + * Slow CVS access: Many people work over modem lines (very + typical for contributors in Europe, Asia, Latin America) + using CVS is slow and might not be available to you (cvs + server down, no anoncvs server available). + + * ChangeLogs travel in a released tarball package, so it is + possible to study the rationale of changes even after a + project is long "released", or you only have the sources for + the code. + + * ChangeLog are not metadata for each file, they are live + files that you can browse in the package that is being + distributed. + </ul> + +Making the CVS commit message be the same as the ChangeLog has other +benefits: + + <ul> + * You can track down with `cvs log' what things were changed, + and match those to meaningful reports on the intentions of + the commit. + + * When reading the commits-list, you can get a glimpse of the + changes without having to diff out or cvs update your tree. + + * You can read off-line the changes that are being made + (asyncrouns operation). + </ul> + +This mechanism works very well for GNOME and other projects. + +Q: Should I use any of the special RCS keywords like $Id: devel-faq,v 1.1 2001/07/31 21:13:05 miguel Exp $, $Author: miguel $, + $Date: 2001/07/31 21:13:05 $, or $Revision: 1.1 $? + +A: Please avoid using those in the source code in the CVS. They + are not really useful, and they cause a lot of conflicts when + people have separate CVS trees. + + It was a nightmare with the Linux kernel when two people had their + private CVS trees and were submitting patches to the core. + diff --git a/web/documentation b/web/documentation new file mode 100644 index 00000000000..4ed2e6a6639 --- /dev/null +++ b/web/documentation @@ -0,0 +1,62 @@ +* Documentation + + Although most of the concepts from Microsoft.NET can + be applied to the completed Mono platform, we do need to + have a complete set of free documentation written specifically + for Mono. + + The documentation license we have chosen is the GNU Free + Documentation License (FDL), the standard for most documents + in the free software world. + + We need documentation on a number of topics: + + <ul> + + * The development tools (compilers, assembler tools, + language reference, design time features). + + * Frequently Asked Question compilations. + + * HOWTO documents. + + * The Class Libraries + + * Tutorials on Mono and the specifics of running it. + + * A guide to Mono as compared to the Microsoft.NET + Framework SDK + + </ul> + +** Class Library documentation + + We are moving to a new setup for documenting the class libraries, + and you can read about it <a href="classlib-doc.html">here</a>. + + A few words of warning and advice for class documentors: + + A well-documented API can ease hours of frustration; as Mono + matures, robust and complete class library documentation will + become increasingly important. As you write API documentation, + whether it is embedded in source files or in external Monodoc XML, + please keep the following in mind: + + Plagarism, even if it's unintentional, is a Bad Thing(TM). + Microsoft's .NET Framework Class Library documentation is an + excellent resource for understanding the behavior and properties of + a type, and a lot of hard work went in to creating this (copyrighted) + resource. Please don't copy from Microsoft's reference when + documenting a type. + + To avoid this, I (<a href="mailto:jbarn@httcb.net">jbarn@httcb.net</a>) + suggest that you read the complete Microsoft documentation for a type, + ponder it for a while, and write the Mono documentation in your own + words. While it's certainly okay to refer to the Microsoft + documentation to clarify your understanding of behavior or properties, + please don't open the Microsoft docs and refer to them for each member + you document. + + There's a lot of domain expertise among the class library contributors; + let's put the same personal stamp on the class library documentation + that we have on the class libraries themselves.
\ No newline at end of file diff --git a/web/download b/web/download new file mode 100644 index 00000000000..c11670fe83b --- /dev/null +++ b/web/download @@ -0,0 +1,597 @@ +* Software Availability + + The Virtual Execution System is available in package `mono'. + Currently this contains a metadata library and the + disassembler. Please refer to our <a + href="runtime.html">Runtime</a> description for more details + on this part of the project. + + The software is also available on the `Mono' channel in <a href="http://www.ximian.com/products/redcarpet/">Red Carpet</a>. + + Some useful links: <a + href="http://www.go-mono.org/mono-beginning.html">Resources/Beginning + section</a>, the <a + href="http://www.go-mono.org/faq.html">FAQ</a>. + + <table> + <tbody> + <tr bgcolor="#DDDDDD"> + <td> + <b>Release 0.18</b><br> + <a href="archive/mono-0.18">Release notes</a><br> + Jan 12th, 2003 + </td> + <td> + <table cellspacing="1" cellpadding="3"> + <tr bgcolor="#BBBBBB"> + <td> + <b>Source Code</b> + </td> + <td> + <ul> + <li><a href="archive/mcs-0.18.tar.gz">Mono Class Libraries and C# Compiler.</a> + <li><a href="archive/mono-0.18.tar.gz">Mono Runtime</a> + <li><a href="archive/gc6.1.tar.gz">Boehm GC 6.1</a> + <li><a href="archive/xsp-0.2.tar.gz">XSP web server</a> <b><font color="#dd0000">New!</font></b> + </ul> + </td> + </tr> + <tr bgcolor="#BBBBBB"> + <td> + <b>Source RPMs</b><br> + (No RPMS for XSP). + </td> + <td> + <ul> + <li><a href="archive/libgc-6.1-1.src.rpm">libgc-6.1-1.src.rpm</a> + <li><a href="archive/mono-0.18-1.src.rpm">mono-0.18-1.src.rpm</a> + </ul> + </td> + </tr> + <tr> + <td></td> + </tr> + <tr> + <td bgcolor="#999999"> + <b>Red Hat 7.3/x86</b> + <ul> + <li><a href="archive/redhat-73-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a> + <li><a href="archive/redhat-73-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a> + <li><a href="archive/redhat-73-i386/mono-0.18-1.i386.rpm">mono-0.18-1.i386.rpm</a> + <li><a href="archive/redhat-73-i386/mono-devel-0.18-1.i386.rpm">mono-devel-0.18-1.i386.rpm</a> + </ul> + </td> + <td bgcolor="#999999"> + <b>Red Hat 7.2/x86</b> + <ul> + <li><a href="archive/redhat-72-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a> + <li><a href="archive/redhat-72-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a> + <li><a href="archive/redhat-72-i386/mono-0.18-1.i386.rpm">mono-0.18-1.i386.rpm</a> + <li><a href="archive/redhat-72-i386/mono-devel-0.18-1.i386.rpm">mono-devel-0.18-1.i386.rpm</a> + </ul> + </td> + </tr> + <tr> + <td bgcolor="#999999"> + <b>Red Hat 7.1/x86</b> + <ul> + <li><a href="archive/redhat-71-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a> + <li><a href="archive/redhat-71-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a> + <li><a href="archive/redhat-71-i386/mono-0.18-1.i386.rpm">mono-0.18-1.i386.rpm</a> + <li><a href="archive/redhat-71-i386/mono-devel-0.18-1.i386.rpm">mono-devel-0.18-1.i386.rpm</a> + </ul> + </td> + <td bgcolor="#999999"> + <b>Mandrake 8.2/x86</b> + <ul> + <li><a href="archive/mandrake-82-i386/libgc-6.1-1.i586.rpm">libgc-6.1-1.i586.rpm</a> + <li><a href="archive/mandrake-82-i386/libgc-devel-6.1-1.i586.rpm">libgc-devel-6.1-1.i586.rpm</a> + <li><a href="archive/mandrake-82-i386/mono-0.18-1.i586.rpm">mono-0.18-1.i586.rpm</a> + <li><a href="archive/mandrake-82-i386/mono-devel-0.18-1.i586.rpm">mono-devel-0.18-1.i586.rpm</a> + </ul> + </td> + </tr> + <tr> +<!-- <td bgcolor="#999999"> --> +<!-- <b>SuSE 8.0/x86</b> --> +<!-- <ul> --> +<!-- <li><a href="archive/suse-80-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a> --> +<!-- <li><a href="archive/suse-80-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a> --> +<!-- <li><a href="archive/suse-80-i386/mono-0.17-1.i386.rpm">mono-0.17-1.i386.rpm</a> --> +<!-- <li><a href="archive/suse-80-i386/mono-devel-0.17-1.i386.rpm">mono-devel-0.17-1.i386.rpm</a> --> +<!-- </ul> --> +<!-- </td> --> + <td bgcolor="#999999"> + <b>Red Hat 8.0/x86</b> + <ul> + <li><a href="archive/redhat-80-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a> + <li><a href="archive/redhat-80-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a> + <li><a href="archive/redhat-80-i386/mono-0.18-1.i386.rpm">mono-0.18-1.i386.rpm</a> + <li><a href="archive/redhat-80-i386/mono-devel-0.18-1.i386.rpm">mono-devel-0.18-1.i386.rpm</a> + </ul> + </td> + </tr> + <tr> + <td bgcolor="#999999"> +<!-- <b>Windows Setup Wizard (NT/2000/XP)</b>
--> +<!-- <ul>
--> +<!-- <li><a href="archive/mono-0.17-stable.exe">Mono-Setup</a>
--> +<!-- </ul>
--> +<!-- </td>
--> + <td bgcolor="#999999"> + <b>Debian packages</b> + <ul> + <li><a href="http://www.atoker.com/mono/">Alp's web site</a> + </ul> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <tr bgcolor="#CCCCC"> + <td> + <b>Regression Tests</b><br> + </td> + <td> + You can get binaries for the Mono Regression Test + Suite <a href="archive/mono-tests.tar.gz">here</a> + </td> + </tr> + </tr> + </tbody> + </table> + + +<br> +* Older Releases: + + We provide binaries for older releases until we have packages for the new release. + + <table> + <tbody> + <tr bgcolor="#DDDDDD"> + <td> + <b>Release 0.17</b><br> + <a href="archive/mono-0.17">Release notes</a><br> + Dec 9th, 2002. + </td> + <td> + <table cellspacing="1" cellpadding="3"> + <tr bgcolor="#BBBBBB"> + <td> + <b>Source Code</b> + </td> + <td> + <ul> + <li><a href="archive/mcs-0.17.tar.gz">Mono Class Libraries and C# Compiler.</a> + <li><a href="archive/mono-0.17.tar.gz">Mono Runtime</a> + <li><a href="archive/gc6.1.tar.gz">Boehm GC 6.1</a> + </ul> + </td> + </tr> + <tr bgcolor="#BBBBBB"> + <td> + <b>Source RPMs</b><br> + (No RPMS for XSP). + </td> + <td> + <ul> + <li><a href="archive/libgc-6.1-1.src.rpm">libgc-6.1-1.src.rpm</a> + <li><a href="archive/mono-0.17-2.src.rpm">mono-0.17-2.src.rpm</a> + </ul> + </td> + </tr> + <tr> + <td bgcolor="#999999">
+ <b>Windows Setup Wizard (NT/2000/XP)</b>
+ <ul>
+ <li><a href="archive/mono-0.17-stable.exe">Mono-Setup</a>
+ </ul>
+ </td>
+ <td bgcolor="#999999">
+ <b>Debian packages</b>
+ <ul>
+ <li><a href="http://www.atoker.com/mono/">Alp's web site</a> + </ul>
+ </td>
+ </tr> + </table> + </td> + </tr> + </tr> + </tbody> + </table> + + <table> + <tbody> + <tr bgcolor="#DDDDDD"> + <td> + <b>Release 0.16</b><br> + <a href="archive/mono-0.16">Release notes</a><br> + Oct 1st, 2002. + </td> + <td> + <table cellspacing="1" cellpadding="3"> + <tr bgcolor="#BBBBBB"> + <td> + <b>Source Code</b> + </td> + <td> + <ul> + <li><a href="archive/mcs-0.16.tar.gz">Mono Class Libraries and C# Compiler.</a> + <li><a href="archive/mono-0.16.tar.gz">Mono Runtime</a> + <li><a href="archive/gc6.1.tar.gz">Boehm GC 6.1</a> + </ul> + </td> + </tr> + <tr bgcolor="#BBBBBB"> + <td> + <b>Source RPMs</b> + </td> + <td> + <ul> + <li><a href="archive/libgc-6.1-1.src.rpm">libgc-6.1-1.src.rpm</a> + <li><a href="archive/mono-0.16-1.src.rpm">mono-0.16-1.src.rpm</a> + </ul> + </td> + </tr> + <tr> + <td></td> + </tr> + <tr> + <td bgcolor="#999999"> + <b>Linux s390</b> + <ul> + <li><a href="archive/s390/glib2-2.0.6-13.s390.rpm">glib2-2.0.6-13.s390.rpm</a> + <li><a href="archive/s390/glib2-devel-2.0.6-13.s390.rpm">glib2-devel-2.0.6-13.s390.rpm</a> +p <li><a href="archive/s390/libgc-6.1alpha5-1.s390.rpm">libgc-6.1alpha5-1.s390.rpm</a> + <li><a href="archive/s390/libgc-devel-6.1alpha5-1.s390.rpm">libgc-devel-6.1alpha5-1.s390.rpm</a> + <li><a href="archive/s390/mono-0.16-1.s390.rpm">mono-0.16-1.s390.rpm</a> + <li><a href="archive/s390/mono-devel-0.16-1.s390.rpm">mono-devel-0.16-1.s390.rpm</a> + </ul> + </td> + </tr> + </table> + </td> + </tr> + <tr> + </tr> + </tr> + </tbody> + </table> + + <table> + <tbody> + <tr bgcolor="#DDDDDD"> + <td> + <b>Release 0.15</b><br> + <a href="archive/mono-0.15">Release notes</a><br> + Aug 23rd, 2002. + </td> + <td> + <table cellspacing="1" cellpadding="3"> + <tr bgcolor="#BBBBBB"> + <td> + <b>Source Code</b> + </td> + <td> + <ul> + <li><a href="archive/mcs-0.15.tar.gz">Mono Class Libraries and C# Compiler.</a> + <li><a href="archive/mono-0.15.tar.gz">Mono Runtime</a> + <li><a href="archive/gc6.1alpha5.tar.gz">Boehm GC 6.1alpha5</a> + </ul> + </td> + </tr> + <tr bgcolor="#BBBBBB"> + <td> + <b>Source RPMs</b> + </td> + <td> + <ul> + <li><a href="archive/libgc-6.1alpha5-1.src.rpm">libgc-6.1alpha5-1.src.rpm</a> + <li><a href="archive/mono-0.15-1.src.rpm">mono-0.15-1.src.rpm</a> + </ul> + </td> + </tr> + <tr> + <td></td> + </tr> +
+ <tr bgcolor="#999999">
+ <td>
+ <b>Windows (win95 friendly)</b>
+ <ul>
+ <li><a href="archive/mono-w32-Aug_28_2002.zip">Mono-w32</a>
+ </ul>
+ </td>
+ <td bgcolor="#999999">
+ <b>Red Hat null-8.0/x86</b>
+ <ul>
+ <li><a href="archive/redhat-null-i386/libgc-6.1alpha5-1.i386.rpm">libgc-6.1alpha5-1.i386.rpm</a>
+ <li><a href="archive/redhat-null-i386/libgc-devel-6.1alpha5-1.i386.rpm">libgc-devel-6.1alpha5-1.i386.rpm</a>
+ <li><a href="archive/redhat-null-i386/mono-0.15-1.i386.rpm">mono-0.15-1.i386.rpm</a>
+ <li><a href="archive/redhat-null-i386/mono-devel-0.15-1.i386.rpm">mono-devel-0.15-1.i386.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ </table> + </td> + </tr> + </tbody> + </table> + +** Binaries for other platforms. + + Already daily volunteer's made binaries: + + <ul> + * <a href="http://www.debianplanet.org/mono/">DebianPlanet</a> + * <a href="http://www.superin.formativ.net/mono/mono.htm">Windows</a> (works without cygwin!) + </ul> + +* Snapshots + +<a name="snapshots"> + + <a href="http://www.go-mono.com/snapshots">Nightly snapshots</a> of + the CVS repository are made every day at 10pm EST (Boston + Time). These are not guaranteed to build, they are just a + snapshot of the tree. + + The <a href="anoncvs.html">anoncvs</a> mirrors provided by + Hispalinux are updated every six hours. + +* Compiling the code + + There are a number of ways of compiling Mono + + <ul> + <li>From the <a href="#scripts">scripts</A> + + <LI><a href="#install">Manually</a> for the first time. + + <li>Manually, <a href="#upgrade">while upgrading</a> to CVS + </ul> + + (which is an easy way to get the latest CVS information) + +<a name="scripts"> +* Compiling with scripts + + There are scripts to help build mono for both Unix and Windows. Get + <a href="mono-build.sh">mono-build.sh</a> for Unix, or <a + href="mono-build-w32.sh">mono-build-w32.sh</a> for Windows. + These scripts automate the installation of GLIB and pkgconfig + (building from source on Unix, and using binary packages + provided by the GIMP for Windows project on Windows.) To use + the script, follow these simple steps: + + <ul> + * Save the script for your platform somewhere (e.g. /usr/local/bin) + * Make the script executable (i.e chmod 755 /usr/local/bin/mono-build.sh) + * Create a directory to hold the mono source, and the compiled binaries (e.g. mkdir ~/mono) + * Change to the new directory (i.e. cd ~/mono) + * run the script (i.e. /usr/local/bin/mono-build.sh) + </ul> + + The script requires wget on either platform, and building the + software requires make, gcc, automake, autoconf, and libtool. + You should install these packages from your distribution or + with the cygwin installer. You should also take care of setting + the right environment variables as the PKG_CONFIG_FLAGS, etc. + + The script will download required packages from + www.go-mono.com and do a cvs checkout of mono in the current + directory. <b>IMPORTANT!:</b> The cvs server chosen defaults to + anonymous cvs; + set your CVSROOT environment variable before running the script to + select a particular cvs server. + +<a name="install"> +** Building the software manually + + You will need to obtain the Mono dependencies first: <a + href="http://www.gtk.org">glib 2.x</a> and + <a href="http://www.freedesktop.org/software/pkgconfig">pkg-config</a>. + +*** Building on Linux + + <ul> + Unpack the Mono runtime distribution: + <pre> + tar xzvf mono-X.XX.tar.gz + cd mono-X.XX + + </pre> + <p> + + Then configure, compile and install: + + <pre> + + ./configure --prefix=/usr/local + make + make install</pre> + + This will give you a runtime, C# compiler and runtime + libraries. + + If you want to recompile the runtime and the compiler, + follow these steps, first unpack the MCS package: + + <pre> + tar xzvf mcs-X.XX.tar.gz + + cd mcs-X.XX + </pre> + + Then use the following command to compile and install: + + <pre> + + make -f makefile.gnu install prefix=/usr/local + </pre> + + You can change /usr/local to something else if you want. + </ul> + + +*** On Windows, to install and work on the compiler and the class libraries: + +**** Install Cygwin and the GNU build tools, Microsoft's .NET Framework SDK and the precompiled GLIB 2.0 and pkg-config libraries. + + <ul> + + * Install <a href="http://www.cygwin.com">Cygwin</a>. + + * Install <a href="http://msdn.microsoft.com/downloads"> + Microsoft .NET Framework SDK</a>. + + * Change to the /usr/local directory + of your Cygwin installation.<br> + Unzip the precompiled packages listed above. + + </ul> + <ul> + + * If you downloaded the Mono + <a href="http://www.go-mono.com/snapshots">nightly snapshot + </a>, untar the snapshot. + + * Change directories to "mcs". + + * Compile: + + <pre> + make + </pre> + </ul> + +*** On Windows, to compile the mono runtime: + + <ul> + + * If you downloaded the Mono + <a href="http://www.go-mono.com/snapshots">nightly snapshot + </a>, untar the snapshot. + + * Change directories to "mono". + + * Configure, compile and install: + <pre> + ./configure --prefix=c:/mono + make + make install + </pre> + + </ul> + +* Software resources and notes + + The required and additional software can be downloaded here: + + * Microsoft's .NET Framework SDK from + <a href="http://msdn.microsoft.com/downloads"> + msdn.microsoft.com/downloads</a>. + + * Cygwin and the GNU Make tools from + <a href="http://www.cygwin.com">www.cygwin.com</a>. + Some people observed problems with autoconf 2.52. Installing + autoconf 2.13 helped in those cases. + + * Precompiled GLIB 2.0 and pkg-config packages (and + their dependencies) by the <a href="http://www.gimp.org/~tml/gimp/win32//index.html">GIMP for Windows</a> project from + <a href="http://www.go-mono.com/archive/pkgconfig-0.11-20020310.zip">http://www.go-mono.com/archive/pkgconfig-0.11-20020310.zip</a><br> + <a href="http://www.go-mono.com/archive/glib-2.0.4-20020703.zip">http://www.go-mono.com/archive/glib-2.0.4-20020703.zip</a> <br> + <a href="http://www.go-mono.com/archive/glib-dev-2.0.4-20020703.zip">http://www.go-mono.com/archive/glib-dev-2.0.4-20020703.zip</a> <br> + <a href="http://www.go-mono.com/archive/libiconv-1.7.zip">http://www.go-mono.com/archive/libiconv-1.7.zip</a> <br> + <a href="http://www.go-mono.com/archive/libiconv-dev-1.7.zip">http://www.go-mono.com/archive/libiconv-dev-1.7-20020101.zip</a> <br> + <a href="http://www.go-mono.com/archive/libintl-0.10.40-20020101.zip">http://www.go-mono.com/archive/libintl-0.10.40-20020101.zip</a><br> + + + * Download the Mono source code from the + <a href="#feb-11">packaged versions</a> or + the <a href="http://www.go-mono.com/snapshots"> + nightly snapshots</a> or the <a href="anoncvs.html"> + Anonymous CVS</a>. The nightly snapshots are done every + night at 10pm EST (Boston Time). The nightly snapshots are + not guaranteed to build, but most of the time they should. + + + </ul> + + +*** Notes on compiling GLIB 2.0 and pkg-config from source: + + + <ul> + + * Some people observed problems with autoconf 2.52. Installing + autoconf 2.13 helped in those cases (don't forget to do a + `make maintainer-clean' after the update). + + * Download, compile and install <a href="http://www.freedesktop.org/software/pkgconfig">pkg-config</a> from source. + (I had to change line 674 of + <nobr><tt>pkg-config-0.8.0/glib-1.2.8/gstrfuncs.c</tt></nobr> from + <nobr><tt>extern char *strsignal (int sig);</tt></nobr> to + <nobr><tt>extern const char *strsignal (int sig);</tt></nobr>. + +<pre> +tar xzvf pkg-config-0.8.0.tar.gz +cd pkg-config-0.8.0 +./configure --prefix=/usr +make +make install +</pre> + + * Download, compile and install <a href="ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.7.tar.gz">libiconv</a> from source.<br> + If you dont have MS Visual C/C++ 4.0 or 5.0 or 6.0 you can also try + the binary package available at <a + href="http://www.gimp.org/win32/libiconv-dev-20001007.zip"> + http://www.gimp.org/win32/libiconv-dev-20001007.zip</a>. + + + * Download, compile and install the + <a href="ftp://ftp.gtk.org/pub/gtk/v2.0/glib-2.0.6.tar.gz"> + glib 2.0</a> from source. + + </ul> + +<a name="upgrading"> +** Upgrading + + To upgrade your Mono installation from CVS, it is very + important that you update your Mono and MCS modules from CVS + at the same time. Failure to do so might result in a + problematic installation as the runtime and the class + libraries will be out of sync. + + Run the following commands to update your CVS tree (more + details in <a href="ccvs.html">Cvs and Mono</a> and the <A + href="anoncvs.html">AnonCVS and Mono</a> pages). + + <pre> + (cd mono; cvs update -dP .) + (cd mcs; cvs update -dP .) + </pre> + + Once you have updated your sources, remove any cached + assemblies or old binaries from the Mono "runtime" directory, + and then compile each component: + + <pre> + (cd mono/runtime; rm *exe *dll) + (cd mono; make) + (cd mcs; make) + </pre> + + Now you can install the result: + + <pre> + (cd mono; make install) + </pre> + + Notice that following the above procedure does not require you + to manually install the software in the `mcs' directory, as + the relevant files will be copied by the `mono' makefiles. diff --git a/web/embedded-api b/web/embedded-api new file mode 100755 index 00000000000..12e0c30450b --- /dev/null +++ b/web/embedded-api @@ -0,0 +1,281 @@ +* Embedding the Mono runtime, preliminary version + + This document describes how to embed the Mono runtime in your + application, and how to invoke CIL methods from C, and how to + invoke C code from CIL + + Slides for Paolo's presentation at .NET ONE on the embedding + API are available here: <a + href="http://primates.ximian.com/~lupus/slides/embed">Hosting the Mono + Runtime</a>. You can also get his <a + href="http://primates.ximian.com/~lupus/slides/embed/Mono-0.01.tar.gz">sample + Mono module for Perl</a> + + Authors: Paolo Molaro, Miguel de Icaza. + +* Embedding the runtime. + + Embedding the runtime consists of various steps: + + <ul> + * Compiling and linking the Mono runtime + + * Initializing the Mono runtime + + * Optionally expose C code to the C#/CIL universe. + + </ul> + + These are discussed in detail next. + +** Compiling and Linking + + To embed the runtime, you have to link your code against the + Mono runtime libraries. To do this, you want to pass the + flags returned by pkg-config to your compiler: + + <pre> + pkg-config --cflags --libs mono + </pre> + + Like this: + + <pre> + gcc sample.c `pkg-config --cflags --libs mono` + </pre> + + You can separate the compilation flags from the linking flags, for + instance, you can use the following macros in your makefile: + + <pre> + CFLAGS=`pkg-config --cflags mono` + LDFLAGS=`pkg-config --libs mono` + </pre> + +** Initializing the Mono runtime + + To initialize the runtime, call mono_jit_init, like this: + + <pre> + MonoDomain *domain; + + domain = mono_jit_init ("domain-name"); + </pre> + + That will return a MonoDomain where your code will be + executed. You can create multiple domains. Each domain is + isolated from the other domains and code in one domain will + not interfere with code in other domains. This is useful if + you want to host different applications in your program. + + Then you can load an assembly containing code into the domain: + + <pre> + MonoAssembly *assembly; + + assembly = mono_domain_assembly_open (domain, "file.dll"); + if (!assembly) + error (); + </pre> + + In the above example, the contents of `file.dll' will be + loaded into the domain. This only loads the code, but it will + not execute anything yet. You can replace `file.dll' with + another transport file, like `file.exe' + + To start executing code, you must invoke a method in the + assembly, or if you have provided a static Main method (an + entry point), you can use the convenience function: + + <pre> + retval = mono_jit_exec (domain, assembly, argc - 1, argv + 1); + </pre> + + If you want to invoke a different method, look at the + `Invoking Methods in the CIL universe' section later on. + +** Shutting down the runtime + + To shutdown the Mono runtime, you have to clean up all the + domains that were created, use this function: + + <pre> + mono_jit_cleanup (domain); + </pre> + +** Applications that use threads. + + The Boehm GC system needs to catch your calls to the pthreads + layer, so in each file where you use pthread.h you should + include the <gc/gc.h> file. + +* Exposing C code to the CIL universe + + The Mono runtime provides two mechanisms to expose C code to + the CIL universe: internal calls and native C code. Internal + calls are tightly integrated with the runtime, and have the + least overhead, as they use the same data types that the + runtime uses. + + The other option is to use the Platform Invoke (P/Invoke) to + call C code from the CIL universe, using the standard P/Invoke + mechanisms. + + To register an internal call, use this call in the C code: + + <pre> + mono_add_internal_call ("Hello::Sample", sample); + </pre> + + Now, you need to declare this on the C# side: + + <pre> + using System; + using System.Runtime.CompilerServices; + </pre> + + + <pre> + class Hello { + [MethodImplAttribute(MethodImplOptions.InternalCall)] + extern static string Sample (); + } + </pre> + + Since this routine returns a string, here is the C definition: + + <pre> + static MonoString* + Sample () + { + return mono_string_new (mono_domain_get (), "Hello!"); + } + </pre> + + Notice that we have to return a `MonoString', and we use the + `mono_string_new' API call to obtain this from a string. + +* Invoking Methods in the CIL universe + + Calling a method in the CIL universe from C requires a number of steps: + + <ul> + * Obtaining the MonoMethod handle to the method. + + * The method invocation. + </ul> + +** Obtaining a MonoMethod + + To get a MonoMethod there are several ways. + + You can get a MonoClass (the structure representing a type) + using: + + <pre> + MonoClass * + mono_class_from_name (MonoImage *image, const char* name_space, const char *name); + </pre> + + and then loop in the returned class method array until you get + the one you're looking for. There are examples of such + searches as static functions in several C files in + metadata/*.c: we need to expose one through the API and remove + the duplicates. + + The other, simpler, way is to use the functions in + debug-helpers.h: there are examples of their use in monograph, + mint and the jit as well. You basically use a string + description of the method, like: + + <pre> + "System.Object:GetHashCode()" + </pre> + + and create a MonoMethodDesc out of it with: + + <pre> + MonoMethodDesc* mono_method_desc_new (const char *name, gboolean include_namespace); + </pre> + + You can then use: + + <pre> + MonoMethod* mono_method_desc_search_in_class (MonoMethodDesc *desc, MonoClass *klass); + MonoMethod* mono_method_desc_search_in_image (MonoMethodDesc *desc, MonoImage *image); + </pre> + + to search for the method in a class or in an image. You would + tipically do this just once at the start of the program and + store the result for reuse somewhere. + +** Invoking a Method + + There are two functions to call a managed method: + + <pre> + MonoObject* + mono_runtime_invoke (MonoMethod *method, void *obj, void **params, + MonoObject **exc); + and + MonoObject* + mono_runtime_invoke_array (MonoMethod *method, void *obj, MonoArray *params, + MonoObject **exc); + </pre> + + obj is the 'this' pointer, it should be NULL for static + methods, a MonoObject* for object instances and a pointer to + the value type for value types. + + The params array contains the arguments to the method with the + same convention: MonoObject* pointers for object instances and + pointers to the value type otherwise. The _invoke_array + variant takes a C# object[] as the params argument (MonoArray + *params): in this case the value types are boxed inside the + respective reference representation. + + From unmanaged code you'll usually use the + mono_runtime_invoke() variant. + + Note that this function doesn't handle virtual methods for + you, it will exec the exact method you pass: we still need to + expose a function to lookup the derived class implementation + of a virtual method (there are examples of this in the code, + though). + + You can pass NULL as the exc argument if you don't want to + catch exceptions, otherwise, *exc will be set to the exception + thrown, if any. if an exception is thrown, you can't use the + MonoObject* result from the function. + + If the method returns a value type, it is boxed in an object + reference. + + We have plans for providing an additional method that returns + an unmanaged->managed thunk like this: + + <pre> + void* mono_method_get_unmanaged_thunk (MonoMethod *method); + </pre> + + You'll be able to store the returned pointer in a function + pointer with the proper signature and call that directly from + C: + + <pre> + typedef gint32 (*GetHashCode) (MonoObject *obj); + + GetHashCode func = mono_method_get_unmanaged_thunk (System_Object_GetHashCode_method); + + gint32 hashvalue = func (myobject); + </pre> + + It may not be possible to manage exceptions in that case, + though. I need to think more about it. + +* Samples + + See the sample programs in mono/sample/embed for examples of + embedding the Mono runtime in your application. + + diff --git a/web/faq b/web/faq new file mode 100644 index 00000000000..7836e3aa6ba --- /dev/null +++ b/web/faq @@ -0,0 +1,1231 @@ +<a href="#basics">Basics</a><br> +<a href="#ximian">The Ximian Role in the Mono project</a><br> +<a href="#gnome">Mono and GNOME</a><br> +<a href="#gui">Building GUI applications with Mono</a><br> +<a href="#msft">Mono and Microsoft</a><br> +<a href="#platforms">Mono platforms</a><br> +<a href="#pnpproject">Mono and the Portable.NET Project</a><br> +<a href="#webservices">Web Services</a><br> +<a href="#asp">Mono and ASP.NET</a><br> +<a href="#ado">Mono and ADO.NET</a><br> +<a href="#monodoc">MonoDoc</a><br> +<a href="#devel">Development Tools and Issues</a><br> +<a href="#java">Mono and Java</a><br> +<a href="#extending">Extending Mono</a><br> +<a href="#portability">Portability</a><br> +<a href="#reuse">Reusing Existing Code</a><br> +<a href="#gcc">Mono and GCC</a><br> +<a href="#performance">Performance</a><br> +<a href="#licensing">Licensing</a><br> +<a href="#patents">Patents</a><br> +<a href="#etc">Miscellaneous Questions</a><br> +<a href="#problems">Mono Common Problems</a><br> + +A <a +href="http://www.es.gnome.org/documentacion/articulos/mono-puf/mono-puf/">Spanish +translation</a> is also available + +<a name="basics"></a> +** Basics + +Q: What is Mono exactly? + +A: The Mono Project is an open development initiative sponsored by + Ximian that is working to develop an open source, Unix + version of the Microsoft .NET development platform. Its objective + is to enable Unix developers to build and + deploy cross-platform .NET Applications. The project will + implement various technologies developed by Microsoft that have now + been submitted to the ECMA for standardization. + +Q: What is the difference between Mono and the .NET Initiative? + +A: The ".NET Initiative" is a somewhat nebulous company-wide effort by + Microsoft, one part of which is a cross-platform development + framework. Mono is an implementation of the development framework, + but not an implementation of anything else related to the .NET + Initiative, such as Passport, software-as-a-service, or + corporate re-branding. + +Q: What technologies are included in Mono? + +A: Mono contains a number of components useful for building new + software: + + <ul> + * A Common Language Infrastructure (CLI) virtual + machine that contains a class loader, Just-in-time + compiler, and a garbage collecting runtime. + + * A class library that can work with any language + which works on the CLR. + + * A compiler for the C# language. In the future we + might work on other compilers that target the Common + Language Runtime. + </ul> + + + Windows has compilers that target the virtual machine from <a + href="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">a + number of languages:</a> Managed C++, Java Script, Eiffel, + Component Pascal, APL, Cobol, Perl, Python, Scheme, + Smalltalk, Standard ML, Haskell, Mercury and Oberon. + + The CLR and the Common Type System (CTS) enables applications and + libraries to be written in a collection of different languages that + target the byte code + + This means for example that if you define a class to do algebraic + manipulation in C#, that class can be reused from any other + language that supports the CLI. You could create a class in C#, + subclass it in C++ and instantiate it in an Eiffel program. + + A single object system, threading system, class libraries, and + garbage collection system can be shared across all these languages. + +Q: Where can I find the specification for these technologies? + +A: You can find the information here: + + + C# <a href="http://www.ecma.ch/ecma1/STAND/ecma-334.htm">http://www.ecma.ch/ecma1/STAND/ecma-334.htm</a> + + CLI <a href="http://www.ecma.ch/ecma1/STAND/ecma-335.htm">http://www.ecma.ch/ecma1/STAND/ecma-335.htm</a> + +Q: Will you implement the .NET Framework SDK class libraries? + +A: Yes, we will be implementing the APIs of the .NET Framework SDK + class libraries. + +Q: Will you offer an ECMA-compliant set of class libraries? + +A: Eventually we will. Our current focus is on inter-operating + with the Microsoft SDK, but we will also offer an ECMA compliant + set of libraries. + +Q: What does the name "Mono" mean? + +A: Mono is the word for `monkey' in Spanish. We like monkeys. + +Q: Is Mono usable? + +A: The JIT engine is usable on Intel x86 machines. An interpreter + can be used on other non-Intel x86 machines. + + The class libraries are mature enough to run some real applications + (the compiler for instance, and every day more and more applications + are natively developed with Mono). + +Q: When will you ship it? + +A: Different parts of Mono will achieve usability at different stages, + once we are comfortable with the compiler, we will release "Mono Core", + which contains everything needed to develop applications with the base + class libraries, this will happen soon and in the meantime you can + download daily snapshots of our work. Also the full ASP.NET support is + close to completion. + + Other higher level class libraries (ASP.NET, ADO.NET, WinForms) will + be released when they become stable. + +Q: What major components will you include in Mono? + +A: Hopefully everything that Microsoft ships on their Framework + (ADO.NET, ASP.NET, WinForms), and we encourage third party developers to + create reusable components that work on both Mono and Windows. + +Q: How can I contribute? + +A: Check the <a href="contributing.html">contributing</a> section. + +Q: Aren't you just copying someone else's work? + +A: We are interested in providing the best tools for programmers to + develop applications for Free Operating Systems. We also want to help + provide the interoperability that will allow those systems to fit in + with other standards. + + For more background, read the <a href="http://www.go-mono.com/rationale.html">Mono + Project white paper</a>. + the project. + +Q: Miguel said once that Mono was being implemented in COBOL. Is that true?. + +A: No. It was a joke. + + +<a name="ximian"></a> + +** The Ximian Role in the Mono Project + +Q: Why is Ximian working on .NET? + +A: Ximian is interested in providing the best tools for programmers to + develop applications for Free Operating Systems. + + For more information, read the project <a + href="rationale.html">rationale</a> page. + +Q: Will Ximian be able to take on a project of this size? + +A: Of course not. Ximian a supporter of the Mono project, but the only way + to implement something of this size is for the entire free software + community to get involved. Visit the <a href="contributing.html">contributing</a> + page if you'd like to help out. + +Q: What pieces will Ximian be working on? + +A: We will devote most of our resources to work on the pieces which are + on the critical path to release a development and execution + environment. Once the project is at a stage where it is useful in + the real world, it will achieve a critical mass of developers to + improve it further. + +Q: Will Ximian offer Mono commercially? + +A: When Mono is ready to be shipped Ximian will offer a commercial + support and services for Mono. + +Q: Does Ximian provide consulting services around Mono? + +A: Yes, Ximian does provide consulting services around Mono to + make it suitable to your needs. Porting the runtime engine, + customizing it, working on specific classes or tuning the code + for your particular needs. + +Q: Will you wait until Mono is finished? + +A: Mono will ship on various stages as they mature. Some people + require only a subset of the technologies, those will ship first. + + More advanced features will take more time to develop. A support + time line will be available in June 2002. + +<a name="gnome"></a> +** Mono and GNOME + +Q: How is Mono related to GNOME? + +A: In a number of ways. This project was born out of the need of + providing improved tools for the GNOME community, and will use + existing components that have been developed for GNOME when they + are available. For example, we plan to use Gtk+ and Libart to + implement Winforms and the Drawing2D API and are considering + GObject support. + +Q: Has the GNOME Foundation or the GNOME team adopted Mono? + +A: Mono is too new to be adopted by those groups. We hope that the + tools that we will provide will be adopted by free software + programmers including the GNOME Foundation members and the GNOME + project generally. + +Q: Should GNOME programmers switch over to Mono now? + +A: It is still far to early for discussions of "switching over." No + pieces of Mono will be ready within the next six months, and a + complete implementation is roughly one year away. + + We encourage GNOME developers to continue using the existing tools, + libraries and components. Improvements made to GNOME will have an + impact on Mono, as they would be the "back-end" for various classes. + +Q: Will Mono include compatibility with Bonobo components? What is the + relationship between Mono and Bonobo? + +A: Yes, we will provide a set of classes for implementing and using + Bonobo components from within Mono. Mono should allow you to write + Bonobo components more easily, just like .NET on Windows allows you + to export .NET components to COM. + +Q: Does Mono depend on GNOME? + +A: No, Mono does not depend on GNOME. We use a few packages produced by + the GNOME team like the `glib' library. + +Q: But will I be able to build GNOME applications? + +A: Yes, we will enable people to write GNOME applications using Mono. + +Q: Do you have C# bindings for GNOME?. + +A: Yes, we currently bind libgnome, libgnomecanvas, and libgnomeui -- + although I dare say I have no idea how functional the bindings are + outside of what I tested in the sample app. I imagine other libraries + under the GNOME framework will be added on an as-needed (and as-requested) + basis...although a truly good bonobo binding will have to wait on the CORBA + remoting support which has been started recently. + +<a name="gui"></a> +** GUI applications + +Q: Will Mono enable GUI applications to be authored? + +A: Yes, you will be able to build GUI applications. Indeed, that is our + main focus. We will provide both the Windows.Forms API and the Gtk# API. + +Q: What is the difference between Gtk# and System.Windows.Forms? + +A: Gtk# is a set of bindings for the Gtk+ toolkit for C# (and other + CIL-enabled languages). System.Windows.Forms is an API defined + by Microsoft to build GUI applications. + +Q: Will I be able to run my smart clients on systems powered by Mono? + +A: As long as your applications are 100% .NET and do not make use + of P/Invoke to call Win32 functions, your smart client applications + will run on Mono platforms. + +Q: Where can I learn more about Gtk#? + +A: The following <a href="http://gtk-sharp.sourceforge.net>link</a> sends you to the page of the project. + +Q: What can I do with Gtk#?. + +A: Gtk# is becoming very usable and you can create applications and + applets like those you see in a GNOME desktop environment. It's + easy to install so it's worth a try. + +Q: How can I compile my HelloWorld.cs which uses Gtk#?. + +A: Try: mcs --unsafe -o HelloWorld.exe -r glib-sharp -r pango-sharp -r + atk-sharp -r gdk-sharp -r gtk-sharp -r gdk-imaging-sharp + HelloWorld.cs + +Q: Is there any way how to connect DataAdapter to some GTK# controls? + +A: There is a sample file called `DbClient' in gtk-sharp/samples that you + might to look at. It is a sample program in Gtk# that adds/updates/deletes + information on a Postgress database. When we have the new table/tree widgets, + I am sure someone would write an adapter for System.Data (in Gtk2 the + tree/list widgets are written using a view/model, so you only need to write + a model that maps to the database). You can have a look at + gtk-sharp/sample/DbClient, where there is a GTK# application that uses + System.Data. It does not use DataAdapter, but DataReader though. + +Q: Do you have an estimate for when Windows.Forms will be released? + +A: We do not know, volunteers are working on this, but there is no set + date yet. The current approach is using the Wine Library to implement + it. + +<a name="msft"></a> +** Mono and Microsoft + +Q: Is Microsoft helping Ximian with this project? + +A: There is no high level communication between Ximian and Microsoft + at this point, but engineers who work on .NET or the ECMA groups + have been very friendly, and very nice to answer our questions, or + clarify part of the specification for us. + + Microsoft is interested in other implementations of .NET and are + willing to help make the ECMA spec more accurate for this purpose. + + Ximian was also invited to participate in the ECMA committee + meetings for C# and the CLI. + +Q: Is Microsoft or Corel paying Ximian to do this? + +A: No. + +Q: Do you fear that Microsoft will change the spec and render Mono + useless? + +A: No. Microsoft proved with the CLI and the C# language that it was + possible to create a powerful foundation for many languages to + inter-operate. We will always have that. + + Even if changes happened in the platform which were undocumented, + the existing platform would a value on its own. + +Q: Are you writing Mono from the ECMA specs? + +A: Yes, we are writing them from the ECMA specs and the published + materials in print about .NET. + +Q: If my applications use Mono, will I have to pay a service fee? + +A: No. Mono is not related to Microsoft's initiative of + software-as-a-service. + +Q: Is the Mono Project is related to the Microsoft Hailstorm effort? Is + Ximian endorsing Hailstorm? + +A: No. The Mono Project is focused on providing a compatible set of + tools for the Microsoft .NET development platform. It does not + address, require, or otherwise endorse the MS Passport-based + Hailstorm single sign-on system that is part of Windows XP and + other services. + +Q: Will Mono or .NET applications depend on Microsoft Passport? + +A: No. MS Passport is unrelated to running .NET compatible applications + produced with the Mono tools. The only thing you will need is a + just-in-time compiler (JIT). + +Q: What is a 100% .NET application? + +A: A `100% .NET application' is one that only uses the APIs defined + under the System namespace and does not use PInvoke. These + applications would in theory run unmodified on Windows, Linux, + HP-UX, Solaris, MacOS X and others. + +Q: If Microsoft will release a port of their .NET platform under the + `Shared Source' license, why should I bother with anything else? + +A: The Shared Source implementation will be expensive and its uses + will be tightly restricted, especially for commercial use. We are + working towards an implementation that will grant a number of + important rights to recipients: use for any purpose, + redistribution, modification, and redistribution of modifications. + + This is what we call <a + href="http://www.gnu.org/philosophy/free-sw.html">Free Software</a> + +Q: Is Mono a free implementation of Passport? + +A: No. Mono is just a runtime, a compiler and a set of class + libraries. + +Q: Will the System.Web.Security.PassportIdentity class mean + that my software will depend on Passport? + +A: No. Applications may use that API to contact a Passport site, but + are not required to do so. + + As long as your application does not use Passport, you will not + need Passport. + +Q: Will Mono running on Linux make Passport available for Linux? + +A: No. However, the Passport toolkit for Linux-based web servers is + available from Microsoft. + +Q: Will Mono allow me to run Microsoft Office on Linux? + +A: No, it will not. Microsoft Office is a Windows application. To + learn more about running Windows applications on Intel Unix systems + refer to <a href="http://www.winehq.com">the Wine Project</a>. + +Q: Will I be able to compile a Microsoft VB.NET application and execute + the resultant MSIL file under MONO on Linux without converting to C# + and recompiling? + +A: Once we have a complete VisualBasic runtime, yes. + +Q: Can mono run the WebMatrix? + +A: No. That requires System.Windows.Forms support which is not + currently implemented. + +Q: Does mono have something like Passport? + Will mono have a server side Passport/Similar framework for XSP as well as client classes? + +A: Not yet, but the client side API for authentication is not the problem. + We will likely have a lot of other authentication APIs, like the Liberty + Alliance APIs. The problem is people on the web provider end that might use + this for authentication. + +<a name="platforms"></a> +** Mono Platforms + +Q: What operating systems does Mono run on? + +A: Mono is known to run on Linux, Unix and Windows systems. + +Q: What architectures does Mono support? + +A: Mono today ships with a Just-in-Time compiler for x86-based + systems. It is tested regularly on Linux, FreeBSD and Windows + (with the XP/NT core). + + There is also an interpreter, which is slower that runs on the + s390, SPARC and PowerPC architectures. + +Q: Can Mono run on Windows 9x, or ME editions? + +A: Mono requires Unicode versions of Win32 APIs to run, + and only a handful of *W functions is supported under Win9x. + + There is Microsoft Layer for Unicode that provides implementation + of these APIs on 9x systems. + + Unfortunately it uses linker trick for delayed load that is not + supported by ld, so some sort of adapter is necessary. + + You will need MSLU and one of the following libs to link Mono to + unicows.dll <a + href="http://mono.eurosoft.od.ua/files/unimono.zip">http://mono.eurosoft.od.ua/files/unimono.zip</a> + or alternatively search the net for "libunicows". + + No changes to Mono source code required, the only thing is to make + sure that linker will resolve imports to adapter library instead of + Win32 libs. This is achieved by inserting -lunimono before + -lkerner32/user32 in the linker's specs file. + + +<a name="pnpproject"></a> +** Mono and Portable.NET + +Q: What are the differences between Mono and Portable.NET? + +A: Most of Mono is being written using C#, with only + a few parts written in C (The JIT engine, the runtime, the + interfaces to the garbage collection system). + + It is easier to describe what is unique about Mono: + <ul> + <li> A Just-in-Time compiler engine. This is important for + making your applications fast. + + <li> A self-hosting C# compiler written in C#, which is clean, easy + to maintain. + + <li> Focus on the .NET Framework: we are tracking down the .NET + Framework API definition, as we believe it is the API people + will be most familiar with. + + <li> A multi-platform runtime engine: both a JIT engine and an + interpreter exist. The JIT engine runs currently on x86 + systems, while the interpreter works on SPARC, StrongARM, + s390 and PowerPC systems. + + <li> Supports Linux, Windows and Solaris at this point. + + <li> The JIT engine is written using a portable instruction + selector which not only generates good code (we are told + that we are faster than Rotor, but it is hard to tell) but + is also the foundation to re-target the JIT engine to other + systems. + + The system employed is described in various compiler + books and it is very similar to what is described in the + book that covers LCC, the ANSI C retargetable C compiler. + + <li> The JIT engine supports in-lining, constant folding and propagation, + + <li> Full support for remoting in the runtime, but the class + libraries are still behind. + + <li> The C# compiler, the JIT engine and the class libraries are + mature enough that the whole system is self-hosting. This means that + we develop Mono completely with itself at this point. + + <li> We are not yet done, and there is a lot of work left to be + done + + <li> We have a great community of developers, without which Mono + would not be possible. + + <li> We are working on an ahead of time compilation mode to + pre-compile code for the target architecture (this is part + of our new code generation effort). + </ul> + +<a name="webservices"></a> +** Web Services + +Q: How is Mono related to Web Services? + +A: Mono is only related to Web Services in that it will implement the + same set of classes that have been authored in the .NET Framework + to simplify and streamline the process of building Web Services. + + But most importantly, Mono is an Open Source implementation of the + .NET Framework. + +Q: Can I author Web Services with Mono? + +A: You will be able to write Web Services on .NET that run on Mono and + vice-versa. + +Q: If Mono implements the SDK classes, will I be able to write and + execute .NET Web Services with it? + +A: Yes. When the project is finished, you will be able to use the + same technologies that are available through the .NET Framework SDK + on Windows to write Web Services. + +Q: What about Soup? Can I use Soup without Mono? + +A: Soup is a library for GNOME applications to create SOAP servers and + SOAP clients, and can be used without Mono. You can browse the + source code for soup using <a + href="http://cvs.gnome.org/bonsai">GNOME's Bonsai</a>. + +Q: Can I use CORBA? + +A: Yes. The CLI contains enough information about a class that + exposing it to other RPC systems (like CORBA) is really simple, and + does not even require support from an object. + + We will be implementing CORBA inter-operation as an extension to the + Mono classes so that we can integrate with Bonobo, just like + Microsoft provides COM inter-operation classes and support + mechanisms. + +Q: Can I serialize my objects to other things other than XML? + +A: Yes, although the serializing tools have not yet been planned, and + you would probably have to implement them yourself. + +Q: Will Mono use ORBit? + +A: No. Mono will be using a new implementation of CORBA that isn't still started. + +<a name="monodoc"></a> +** MonoDoc + +Q: What is MonoDoc? + +A: MonoDoc is a graphical documentation editor and viewer. Currently, MonoDoc + consists of a Gtk# application and is in heavy development. There is also a + Qt# version of it. + + +<a name="devel"></a> +** Development Tools and Issues + +Q: Will it be possible to use the CLI features without using byte codes + or the JIT? + +A: Yes. The CLI engine will be made available as a shared library. + The garbage collection engine, the threading abstraction, the + object system, the dynamic type code system and the JIT will be + available for C developers to integrate with their applications if + they wish to do so. + +Q: Will you have new development tools? + +A: With any luck, Free Software enthusiasts will contribute tools to + improve the developer environment. These tools could be developed + initially using the Microsoft implementation of the CLI and then + executed later with Mono. + +Q: What kind of rules make the Common Intermediate Language useful for + JITers? + +A: The main rule is that the stack in the CLI is not a general purpose + stack. You are not allowed to use it for other purposes than + computing values and passing arguments to functions or return + values. + + At any given call or return instruction, the types on the stack + have to be the same independently of the flow of execution of your + code. + +Q: Is it true that the CIL is ideal for JITing and not efficient for + interpreters? + +A: The CIL is better suited to be JITed than JVM byte codes, but you + can interpret them as trivially as you can interpret JVM byte + codes. + +Q: Isn't it a little bit confusing to have the name of "XSP" (the same + as in the Apache Project) for the ASP.NET support in Mono?. + +A: In Mono, xsp is just the name of the C# code generator for ASP.NET + pages. In the Apache Project, it is a term for the "eXtensible Server + Pages" technology so as they are very different things, they don't + conflict. + +Q: What about using something like Jabber instead of the System.Messaging + namespace?. + +A: In short, MSMQ is not something like Jabber, but asynchronous messaging + through queues. Useful queues do more than serialize messages, they are + also platform bridges. + +Q: Are you supporting XMLDocument and relatives?. + +A: Currently, we aren't implementing them yet. It would require updates to + most of the XmlNode derivatives so it's not a trivial task. We are + currently focusing on getting XPath support working. + +Q: Is there any plan to develop an aspx server for Mono?. + +A: The web server turned out to be very simple compared to the rest of the + work. Gonzalo has got the page generator mostly done (a module called + xsp, who has nothing to do with the XSP term used in the Apache Project). + Patrik has done a lot of the work to get the ProcessRequest to work. + You can try to help in the final touches to the System.Web classes and + writing regression tests for the widgets we have. + +Q: Is there any way I can develop the class libraries using Linux yet? + +A: Yes. Some class libraries can be developed on Linux. Search for + Paolo's post (he lists which classes can be compiled fine now). + +Q: Is there any way I can install a known working copy of mono in /usr, + and an experimental copy somewhere else, and have both copies use + their own libraries? (I'm still not very good at library paths in + Linux) + +A: Yes. Just use two installation prefixes. + +Q: How should I write tests or a tests suite? + +A: If you do a test suite for C#, you might want to keep it + independent of the Mono C# compiler, so that other compiler + implementations can later use it. + +Q: Would it be too terrible to have another corlib signed as mscorlib? + +A: We rename corlib to mscorlib also when saving the PE files, in fact, + the runtime can execute program created by mono just fine. + +Q: Is there a relatively straightforward way to repeat the steps taken + by Paolo to get Mono completely self-hosted on Linux? + +A: To build the compiler and class libraries in Linux, run: + <ul><li>make -f makefile.gnu. To install them, run: </li> + <li>make -f makefile.gnu install prefix=/opt/mono</li> + </ul> + + If you want to produce and distribute a monocharge tarball, run: + make -f makefile.gnu dist + Of course you have to run these in the top level mcs directory. + +Q: Is it possible to build a C# file to some sort of intermediate format which + can linked into a final module, like the traditional .c -> .o -> .so path? + +A: You could do: mcs /target:module file1.cs, mcs /target:module file2.cs, + mcs /target:exe file1.dll file2.dll /out:mybin.exe + +Q: Is there any plans for implementing remoting in the near future?, When will + work in System.Runtime.Remoting.dll start? + +A: The remoting infrastructure is in place. Some of the channels and + formatters are not. + +Q: I'm wondering if there are any plans to start using nant to build the + class lib + test lib. i think that every project need/should use an + automated build process and nant + a couple of tools enables this. is + the problem that the compiler can't run nant yet? + +A: Maybe well be doing some sort of automated build process + testing when + the summer finish. + +Q: My C code uses the __stdcall which is not availble on Linux, how can I + make the code portable Windows/Unix across platforms? + +A: Replace the __stdcall attribute with the STDCALL macro, and include this + in your C code for newer gcc versions: + + #ifndef STDCALL + #define STDCALL __attribute__((stdcall)) + #endif + +<a name="asp"> +** Mono and ASP.NET + +Q: Is Mono supporting ASP.NET? + +A: Yes. The development of the support for ASP.NET comes in various stages, + here is what Gonzalo has been working on: 1. The Parser. 2. Getting the + parser to generate output compatible with ASP.NET. 3. Running the sample + output with the real Microsoft runtime but using our generated page. 4. + Running the sample with our classes with the .NET runtime. 5. Running + our sample code with our classes with our runtime. This is the process + we are following. Currently Gonzalo has reached point 5. + +Q: Do I need install cygwin to work on ASP.NET in mono or Linux is enough since + it is self host right now. + +A: Linux is enough. + +Q: Any plan to make ASP.NET in mono works with Apache in Linux?. + +A: Yes, we have plans to do so, but we need to wait for Patrik's patches to + HttpRuntime. Once that is there, writing a mod_mono should be trivial + (look at mono/samples/embed for a sample embedded application). + +<a name="ado"> +** Mono and ADO.NET + +Q: What is the status of ADO.NET support?. Could I start migrating + applications from MS.NET to Mono?. + +A: You could start right now using the ADO.NET support in mono, of course, + if you want to help filling the missing gaps while you develop your app + :-) Well, what I mean is that we're not that far to having full ADO.NET + support in Mono, and we've got a lot of working things, so if we could + get more help, we'd finish it really soon :-) + +Q: In developing the data architecture for the application are there and + objects I should stay away from in order to insure the smoothest possible + transition (minimum code rewrite) to Mono's ADO.NET implementation? (For + example, strongly typed datasets versus untyped datasets, etc...) + +A: We are implementing all the classes in Microsoft .NET's System.Data, so + you can be sure that things will work the same in Mono as with the Microsoft + implementation. + +Q: Does Mono can to connect to Sybase by using Mono.Data.*? + +A: Yes. use Mono.Data.SybaseClient. First of all you have to create a + SybaseConnection, and then, from it, use it as any other + IDbConnection-based class. + +<a name="java"> +** Mono and Java + +Q: Why don't you use Java? After all, there are many languages that + target the Java VM. + +A: You can get very good tools for doing Java development on free + systems right now. <a href="http://www.redhat.com">Red Hat</a> has + contributed a <a href="http://gcc.gnu.org">GCC</a> <a + href="http://gcc.gnu.org/java">front-end for Java</a> that can take + Java sources or Java byte codes and generate native executables; <a + href="http://www.transvirtual.com">Transvirtual</a> has implemented + <a href="http://www.kaffe.org">Kaffe</a> a JIT engine for Java; + Intel also has a Java VM called <a + href="http://www.intel.com/research/mrl/orp">ORP</a>. + + The JVM is not designed to be a general purpose virtual machine. + The Common Intermediate Language (CIL), on the other hand, is + designed to be a target for a + wide variety of programming languages, and has a set of rules + designed to be optimal for JITers. + +Q: Could Java target the CLI? + +A: Yes, Java could target the CLI. We have details on a <a + href="ideas.html#guavac">project</a> that someone could take on to + make this happen. + + Microsoft has an implementation of the Java language called J# that + can target the CIL execution engine. + +Q: Is it possible to write a JVM byte code to CIL converter? + +A: Yes, it is possible. Here are a few starting point: + + <ul> + * A byte code representation is really a flattened forest of + trees. Look at the Mono JIT engine to see how we compute + the basic blocks (this is used to figure out the "trees"). + + The forest is just an array of trees. + + Indeed, run the JIT engine with -d (mono -d prog.exe) and + you will see how these trees look like. + + You will have to do something similar for Java. + + * Each "forest of trees" has a meaning. This meaning can now + be translated into the equivalent "meaning" in CLR-land. + </ul> + +Q: Could mono become a hybrid CIL/java platform? + +A: No. It is quite far from the philosophy of the project. The idea of Mono + is, to have only _one_ VM, on which all can run. And if there existing a + binary-converter from Java-.class to IL and if there existing something + like J-Sharp on Mono, you can write programs in Java, which than can run + on Mono. You do not need two bindings (like your example: GTK-Sharp _and_ + Java-Gnome). You need only _one_ of it (GTK-Sharp). Thats the idea of Mono. + An other point is, that there are no people, who use Open Source-JVMs. They + all prefer Suns original. But for Unix there don't exist a .NET-Framework. + So it is possible, that in the future Mono is the standard .NET for Unixes. + +Q: Do you plan to implement a Javascript compiler? + +A: Yes. Eto Demerzal has started a Rhino port to C#. + After this is completed, we will begin developing + the JavaScript compiler. + +Q: Can Mono or .NET share system classes (loaded from mscore.dll and other + libs) or will it behave like Sun's Java VM? + +A: What you can do with mono is to load different applications in their own + application domain: this is a feature of the CLR that allows sandboxing + applications inside a single process space. This is usualy exploited to + compartmentalize different parts of the same app, but it can also be + effectively used to reduce the startup and memory overhead. + Using different appdomains the runtime representation of types and + methods is shared across applications. + +<a name="extending"></a> +** Extending Mono + +Q: Would you allow other classes other than those in the + specification? + +A: Yes. The Microsoft class collection is very big, but it is by no + means complete. It would be nice to have a port of `Camel' (the + Mail API used by Evolution inspired by Java Mail) for Mono + applications. + + You might also want to look into implementing CORBA for Mono. Not + only because it would be useful, but because it sounds like a fun + thing to do, given the fact that the CLI is such a type rich + system. + + For more information on extending Mono, see our <a + href="ideas.html">ideas</a> page. + +Q: Do you plan to Embrace and Extend .NET? + +A: Embracing a good technology is good. Extending technologies in + incompatible ways is bad for the users, so we do not plan on + extending the technologies. + + If you have innovative ideas, and want to create new classes, we + encourage you to make those classes operate correctly well in both + Mono and .NET. + +Q: Is there any way I can develop the class libraries using Linux yet? + +A: Yes. Some class libraries can be developed on Linux. Search for + Paolo's post (he lists which classes can be compiled fine now). + +Q: Is there any way I can install a known working copy of mono in /usr, + and an experimental copy somewhere else, and have both copies use + their own libraries? (I'm still not very good at library paths in + Linux) + +A: Yes. Just use two installation prefixes. + + +<a name="portability"></a> +** Portability + +Q: Will Mono only work on Linux? + +A: Currently, we are doing our work on Linux-based systems and + Windows. We do not expect many Linux-isms in the code, so it + should be easy to port Mono to other UNIX variants. + +Q: What about Mono on non Linux-based systems? + +A: Our main intention at Ximian is to be able to develop GNOME + applications with Mono, but if you are interested in providing a + port of the Winforms classes to other platforms (frame buffer or + MacOS X for example), we would gladly integrate them, as long + they are under an open source license. + +Q: What operating systems/CPUs do you support + +A: Mono currently runs on Linux, Windows, Solaris and FreeBSD. + There is a JIT engine available for x86 processors that can + generate code and optimizations tailored for a particular CPU. + + Interpreters exist for the SPARC, PowerPC and StrongARM CPUs. + +Q: Does Mono run on Windows? + +A: Yes. You can get pre-compiled + binaries from <a href="http://www.go-mono.com/download.html">http://www.go-mono.com/download.html</a> + +Q: Does Mono run on Linux? + +A: Yes. You can get pre-compiled + binaries from <a href="http://www.go-mono.com/download.html">http://www.go-mono.com/download.html</a> + +Q: Will I require Cygwin to run mono? + +A: No. Cygwin is only required to build Mono. + +Q: Will Mono depend on GNOME? + +A: It will depend only if you are using a particular assembly (for + example, for doing GUI applications). If you are just interested + in Mono for implementing a `Hello World Enterprise P2P Web + Service', you will not need any GNOME components. + +Q: Is anyone working on porting Mono to IA-64? + +A: Nobody is working on such port. + +Q: If I were about to start a Mono port to IA-64,would the same lburg code + generator work for IA-64 also? or anything else need to be used for code + generation(as the processor architecture is totally different from IA32) + +A: The lburg approach can be use for any processor architecture. But you might + think in another better approach. + +Q: Do you plan to port Rhino to C#?. + +A: Eto Demerzal has started a Rhino port to C#. + +Q: Has anyone succeeded in building a Mac version of the C# environment. + If so can you explain how? + +A: You could try to check with the Darwin people, or the Fink people. + Mono/C# is self hosting on Linux/PPC which is the hard part, so it + should be relatively simple to get it to work on MacOS + +<a name="reuse"></a> +** Reusing Existing Code + +Q: What projects will you reuse or build upon? + +A: We want to get Mono in the hands of programmers soon. We are + interested in reusing existing open source software. + +Q: What about Intel's research JIT framework, ORP? + +A: At this time, we are investigating whether we can use elements of + ORP for Mono. ORP is a research JIT engine that has a clearly + defined API that splits the JIT from the GC system and the actual + byte code implementation. + + We are using some pieces of ORP (Their code generation interface) + and we use it as a source of inspiration for optimizations. Paolo + and Dietmar consider ORP as being one of the best JIT engines out + there (and their research work and papers are very useful if you are + interested in JIT technology). + +Q: What about using GNU Lightning? + +A: We are not using GNU Lightning. Our JIT is using an instruction + selector based on tree-pattern matching, and a code generation + interface that is very tied to the current architecture. + +Q: Will I be able to use Microsoft SQL Server 2000 or will I need to switch + to a specific Open Source Database. Will I need to recode? + +A: There should not be any need to recode. + +Q: What do I need to watch out for when programming in VB.NET so that I'm + sure to be able to run those apps on Linux? + +A: Not making any PInvoke or DLL calls should and not using anything in + the Microsoft.* namespaces should suffice. Also do not use any + Methods/Classes marked as "This type/method supports the .NET Framework + infrastructure and is not intended to be used directly from your code." + even if you know what these classes/methods do. + +Q: Will built-in reporting be supported for crystal reports? This is a + heavily used part of our system. + +A: Probably not. Crystal Reports are propriety. Someone may try to emulate + the behavior, but no-one has yet volunteered. + +Q: Who about writing to the registry? As I understand it, Linux does not have + a counterpart to the registry. Should I avoid relying on that feature? + +A: Try to avoid it. Although there would be a emulation for registry in + Mono too. GNOME does have a registry like mechanism for configuration. But + Even if gnome has a configuration system similar to the registry, the keys + will not be equal, so you will probably end up having to do some runtime + detection, and depending on this load an assembly that has your + platform-specific hacks. + +Q: System.Data.SqlClient with FreeTDS, will you port parts of these to C# and + use them? + +A: if their license is compatible with mono's, yes, we'd think about porting + them. If not, we'll continue with the plan of using FreeTDS. + +<a name="gcc"></a> +** Mono and GCC + +Q: Are you working on a GCC front-end to C#? A GCC back-end that will + generate CIL images? What about making a front-end to GCC that + takes CIL images and generates native code? + +A: We are currently seeking volunteers for those projects. + Visit the <a href="contributing.html">contributing</a> section if + you are interested. + +Q: But would this work around the GPL in the GCC compiler and allow + people to work on non-free front-ends? + +A: People can already do this by targeting the JVM byte codes (there + are about 130 compilers for various languages that target the JVM). + +Q: Why are you writing a JIT engine instead of a front-end to GCC? + +A: We want the JIT engine and runtime engine because they will be able + to execute CIL executables generated on Windows, and so no recompilation + will be necessary. + +<a name="performance"></a> +** Performance + +Q: How fast will Mono be? + +A: We can not predict the future, but a conservative estimate is that + it would be at least `as fast as other JIT engines'. + + We would like to ship various JIT engines with Mono, just like + Microsoft has done with their .NET development platform. We could + provide a faster, JIT for fast load times but lower performance, + and an and an optimizing JIT that would be slower at generating + code but produce more optimal output. + + The CIL has some advantages over the Java byte code: it is really + an intermediate representation and there are a number of + restrictions on how you can emit CIL code that simplify creating + better JIT engines. + + For example, on the CIL, the stack is not really an abstraction + available for the code generator to use at will. Rather, it is a + way of creating a postfix representation of the parsed tree. At + any given call point or return point, the contents of the stack are + expected to contain the same object types independently of how the + instruction was reached. + +<a name="licensing"></a> +** Licensing + +Q: Will I be able to write proprietary applications that run with + Mono? + +A: Yes. The licensing scheme is planned to allow proprietary + developers to write applications with Mono. + +Q: What license or licenses are you using for the Mono Project? + +A: The C# Compiler is released under the terms of the <a + href="http://www.opensource.org/licenses/gpl-license.html">GNU GPL</a>. The runtime + libraries are under the <a + href="http://www.opensource.org/licenses/lgpl-license.html">GNU + Library GPL</a>. And the class libraries are released + under the terms of the <a + href="http://www.opensource.org/licenses/mit-license.html">MIT X11</a> + license. + + The Mono runtime and the Mono C# Compiler are also available under + a proprietary license for those who can not use the LGPL and the + GPL in their code. + + For licensing details, contact <a + href="mailto:mono-licensing@ximian.com">mono-licensing@ximian.com</a> + + +Q: I would like to contribute code to Mono under a particular + license. What licenses will you accept? + +A: We will have to evaluate the licenses for compatibility first, + but as a general rule, we will accept the code under the same + terms of the "container" module. + +<a name="patents"></a> +** Patents + +Q: Could patents be used to completely disable Mono (either submarine + patents filed now, or changes made by Microsoft specifically to + create patent problems)? + +A: No. First, its basic functional capabilities have pre-existed too + long to be held up by patents. The basic components of Mono are + technologically equivalent to Sun's Java technology, which has been + around for years. + + Mono will also implement multi-language and + multi-architecture support, but there are previous technologies + such as UCSD p-code and ANDF that also support multiple languages + using a common intermediate language. The libraries are similar + to other language's libraries, so again, they're too similar to + be patentable in large measure. + + However, if Microsoft does patent some technology, then our plan is + to either (1) work around it, (2) chop out patented pieces, (3) + find prior art that would render the patent useless. + + Not providing a patented capability would weaken the + interoperability, but it would still provide the free software / + open source software community with good development tools, which + is the primary reason for developing Mono. + +<a name="etc"></a> +** Miscellaneous Questions + +Q: You say that the CLI allows multiple languages to execute on the + same environment. Isn't this the purpose of CORBA? + +A: The key difference between CORBA (and COM) and the CLI is that the + CLI allows "data-level interoperability" because every + language/component uses the same data layout and memory management. + + This means you can operate directly upon the data types that someone + else provides, without having to go via their interfaces. It also + means you don't have to "marshal" (convert) parameters (data + layouts are the same, so you can just pass components directly) and + you don't have to worry about memory management, because all + languages/components share the same garbage collector and address + space. This means much less copying and no need for reference + counting. + +Q: Will you support COM? + +A: The runtime will support XPCOM on Unix systems and COM on Windows. + Most of the code for dynamic trampolines exists already. + +Q: Will Ximian offer certifications on Mono or related technologies?. + +A: It's possible. But there is no plan about this. So the short answer is no. + +Q: Are there any Boehm's GC binaries? + +A: Yes. You can find RPMs <a href="http://java.thn.htu.se/~toor/">here</a>, though + if your distribution provides the correct packages, you should use those. + The suggested version of the Boehm GC is 6.1. + +Q: How can I report a bug? + +A: The best thing is to track down the bug and provide a simple test to + reproduce the bug. You can then add the bug to the + <a href="http://bugzilla.ximian.com/enter_bug.cgi">bugtracking system</a>. + + Please provide information about what version of mono you're using + and any relevant details to be able to reproduce the bug. Note that + bugs reported on the mailing-list may be easily forgotten, so it's + better to file them in the <a href="http://bugzilla.ximian.com/enter_bug.cgi">bug tracking system</a>. + +Q: Does mcs support the same command line options as the MS C# + compiler? + +A: The Mono C# compiler now supports the same command line + arguments as the Microsoft C# compiler does. + +Q: How about getting searchable archives on lists.ximian.com? + +A: You can perform a search on the mono-related mailing lists + <a href="http://www.go-mono.com/mailing-lists.html">here</a>. + +Q: When using mono from cvs or from a snapshot, I get an error messaage + saying that Mono and the runtime are out of sync. How do I fix that? + +A: If you use mono from cvs, you need to be prepared for changes in the + runtime internals. This means that you should keep a working setup + before blindling updating (a working setup may just be the last released + tarball or a recent binary snapshot). + Usually, compiling corlib with mcs before recompiling the C runtime does + the right thing (but occasionally you may need to do it the other + way around). + +Q: Why are you going for a GtkHtml implementation? + +A: GtkHTML is just a lightweight HTML rendering engine that does not + support CSS, so we need it to look decent for those of us that will + be using the documentation in our day-to-day work on Linux. The + Web-based interfaces lack the agility that you get from a native GUI + tool to browse your documentation. Probably later on, we will write + scripts and generate a full documentation set that is web-browsable, + but we need a command-line and GUI tools that we can use natively on + Linux when disconnected from the Web (and that has better + interactions than a web page). + +Q: Is there a command-line tool that allows me to access .NET interactively? + +A: There are several but one that is free software and uses MCS is the one + Dennis Lu from Rice University is working on; a REPL C# interpreter. + +Q: Is it possible to use Visual C++ with Mono?. + +A: Well, It's possible to run VC++ generated apps under Mono though. + +<a name="problems"></a> +** Mono Common Problems + + If you are having problems compiling or running Mono software + or if you think that you found a bug, etc. Please visit the + <a href="http://geneura.ugr.es/~jaime/deploy/mono-common-problems.html">Mono Common Problems</a> document and try there. + diff --git a/web/firebird b/web/firebird new file mode 100755 index 00000000000..8e1f73ef126 --- /dev/null +++ b/web/firebird @@ -0,0 +1,175 @@ +* Firebird and Interbase Data Provider + +<ul> + <li>Does not exist in Mono, but is a separate project</li> + + <li><a href="http://firebird.sourceforge.net/index.php">Firebird Relational Database</a> is + an independent project which uses source code based on the Interbase source code released + by Borland under the Interbase Public License</li> + + <li>Both the Firebird Relational Database and the Firebird .NET Data Provider can be + downloaded from <a href="http://sourceforge.net/projects/firebird/">here</a></li> + + <li>The Firebird .NET Data provider has been made + available by Carlos Guzmán Álvarez (aka "Carlos G.A."), who has also made a + number of contributions to the OdbcJdbc code</li> + +</ul> + +** Current Status + +<ul> + <li>Currently, it is able to connect to Firebird and Interbase databases + and execute commands</li> + + <li>The new data + provider/driver is written in C# and provides a high-performance native + implementation of the GDS32/API functions. This means that .Net developers + will be able to access Firebird databases without the need of Firebird + client install</li> + + <li>In support of the new module, a new mailing list + <a href="http://lists.sourceforge.net/lists/listinfo/firebird-net-provider">firebird-net-provider</a> has + been created. Please use this list for any + questions that you may have about the provider</li> + + <li>Stuff that works: + <ul>
+ <li>Currently implemented classes:
+ <ul>
+ <li>Connection and Connection Pooling</li>
+ <li>Command</li>
+ <li>Transaction</li>
+ <li>CommandBuilder</li>
+ <li>DataAdapter</li>
+ <li>DataReader</li>
+ <li>Error</li>
+ <li>ErrorCollection</li>
+ <li>Exception</li>
+ <li>Parameter</li>
+ <li>ParameterCollection</li>
+ <li>Transaction</li>
+ </ul>
+ </li>
+ </ul> + </li> + +</ul> + +** Action Plan + +<ul> + <li>Bug fixing</li>
+ <li>Improving API reference documentation</li>
+ <li>Full testing with Firebird 1.5</li>
+ <li>Test with Mono ( http://www.go-mono.com )
+ <ul>
+ <li>Status : Started</li>
+ </ul>
+ </li>
+
+ <li>Support for array datatype
+ <ul>
+ <li>Status : Started</li>
+ <li>Comments: See Interbase API reference documentation</li>
+ <li>Add new file FbArray.cs for array fields management</li>
+ </ul>
+ </li>
+
+ <li>Support for Stored Procs calls that have returns values
+ <ul>
+ <li>Status : Pending.</li>
+ <li>Comments: Modify the isc_dsql_prepare method of GDS implementation for
+ allow to return the output parameters.</li>
+ </ul>
+ </li>
+
+ <li>Implementation of FbClientPermission and FbClientPermissionAttribute
+ <ul>
+ <li>Status : Pending</li>
+ <li>Comments: See if these are really needed for Firebird</li>
+ </ul>
+ </li>
+
+ <li>Improve Logger implementation
+ <ul>
+ <li>Status: Pending</li> + </ul> + </li> + +</ul> + +** Testing + +<ul> + <li>Need a working mono and mcs</li> + <li>Need access to a Firebird Relational Database or you can download + it from <a href="http://firebird.sourceforge.net">here</a></li> + <li>Get the Firebird .NET data provider from here as + <a href="http://lists.sourceforge.net/lists/listinfo/firebird-net-provider">firebird-net-provider</a>. Make + sure the Firebird .NET data provider binary assembly FirebirdSql.Data.Firebird.dll is + installed in the same place as the mono class libraries.</li> + <li>C# Example for Mono's System.Data.OleDb: +<pre> + using System; + using System.Data; + using FirebirdSql.Data.Firebird; + + public class Test + { + public static void Main(string[] args) + { + string connectionString =
+ "Database=C:\\PROGRAM FILES\\FIREBIRD\\EXAMPLES\\EMPLOYEE.GDB;" +
+ "User=SYSDBA;" +
+ "Password=masterkey;" +
+ "Dialect=3;" +
+ "Server=localhost";
+ IDbConnection dbcon = new FbConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + string sql = "SELECT * FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + object dataValue = myReader.GetValue(0); + string sValue = dataValue.ToString(); + Console.WriteLine("Value: " + sValue); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r FirebirdSql.Data.Firebird.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r FirebirdSql.Data.Firebird.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> +</li> + +</ul> + diff --git a/web/gcc-frontend b/web/gcc-frontend new file mode 100644 index 00000000000..2b15346db69 --- /dev/null +++ b/web/gcc-frontend @@ -0,0 +1,9 @@ +* The GCC front-end + + The GCC front-end will accept input in a binary file with + codes in the Common Intermediate Language (CIL), and generate + native code. + + This will allow pre-compilation and full optimization to take + place before a program is executed. + diff --git a/web/gtk-sharp b/web/gtk-sharp new file mode 100644 index 00000000000..1f286e59c52 --- /dev/null +++ b/web/gtk-sharp @@ -0,0 +1,147 @@ +* Gtk# + + <a href="http://gtk-sharp.sourceforge.net">Gtk#</a> (Gtk + sharp) is a set of C# language bindings for the + <a href="http://www.gtk.org">Gtk+</a> toolkit and other + libraries that are part of the + <a href="http://www.gnome.org">GNOME</a> platform . + +** API of Gtk# + + The API is browsable + <a href="http://primates.ximian.com/~tvgm/gtk-sharp-docs/">here</a> + +** Where to learn more. + + Visit the official site for the <a href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>. + The <a href="http://www.go-mono.org/faq">Mono FAQ</a> has some useful + information too. + +** GTK# On Linux + +<p>Where to get distributions of GTK# for Linux: TODO + +<p>Buidling on Linux: + +<ul> + <li>Get GTK# source from <a href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.</li> + <li>run ./autogen.sh --prefix=my_mono_installation_prefix</li> + <li>make</li> + <li>make install</li> +</ul> + +** GTK# On Windows + +<p>There is a Windows Installer for GTK# <a href="http://www.sport-huettn.de/mono/gtk-sharp-0.6-stable-2.exe">here</a>.
+ +<p>If you want to build GTK# yourself on Windows:
+
+<p>To build gtk# under windows, you will need the following:
+
+<ul>
+ <li>cygwin from <a href="http://www.cygwin.com/">here</a> When installing Cygwin via setup.exe,
+ by default binutils and other tools do not get installed; you have to make
+ sure to select these items. Just make
+ sure Base and Development are set to Install.</li>
+ <li>Mono 0.17 or later from <a href="http://www.go-mono.com/download.html">here</a>
+ You can use Windows Setup Wizard (NT/2000/XP).</li>
+ <li>GTK+ 2.0 (and dependencies). You can obtain gtk+ 2.0 by either of the
+following:
+ <ul>
+ <li>You can get a Windows Installer at:
+ <a href="http://www.dropline.net/jade/download.html">here</a> </li>
+ <li>or get the separate binary and dev/lib packages at
+ at <a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">here</a> </li>
+ <li>or binary package from Dev-C++ site <a href="http://www.bloodshed.net/dev/packages/gtk.html">here</a> </li>
+ <li>or get Gtk4Win <a href="http://wingtk.sourceforge.net/index.html">here</a> </li>
+ <li>or the source at <a href="http://www.gtk.org/">here</a> </li>
+ </ul>
+ </li>
+ <li>binary distriubtion of a current web browser
+ like Internet Explorer 4.0, Mozilla 1.0, or Netscape 7.0 which
+ includes things like msvcrt.dll.</li>
+ <li>Microsoft .NET Framework at
+ <a href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a> </li>
+
+<p>If you are running Windows 95/98/ME, then you will need Unicode support.
+Look in
+mono-list archives for information about how to get
+Mono to work on Windows 9x.
+<a href="http://lists.ximian.com/archives/public/mono-list/2002-December/004158.html">here</a>
+
+<p>Environment Variables to set:
+<ul>
+<li>PATH - set to your mono installation bin and lib path.
+ For example, my mono installation prefix is:
+<pre>
+F:/cygwin/home/DanielMorgan/mono/install
+</pre>
+ <p>So, I would set my PATH in the Windows Control Panel as:
+<pre>
+F:/cygwin/home/DanielMorgan/mono/install/bin;F:/cygwin/home/DanielMorgan/mono/install/lib</li>
+</pre>
+</li>
+<li>LD_LIBRARY_PATH - set to your mono installation lib path</li>
+<li>PKG_CONFIG_PATH - set to your mono installation lib/pkgconfig path, such
+ as,
+<pre>
+ F:/cygwin/home/DanielMorgan/mono/install/lib/pkgconfig</li>
+</pre>
+
+ <p>If you got the gtk-sharp source, cd to the gtk-sharp directory, type:
+<pre>
+ ./autogen.sh --prefix=~/mono/install
+</pre>
+
+ <p>Set your --prefix= to whatever your mono installation prefix is located.
+ This will take awhile to go through the ./autogen.sh and ./configure...
+
+ <p>After that it finishes succesfully, you run make with the makefile.win32
+ like:
+<pre>
+ make -f makefile.win32
+</pre>
+
+ <p>After that finishes succesfully, you can copy to your mono installation lib
+ path like:
+<pre>
+ cp */*.dll ~/mono/install/lib
+</pre>
+</ul>
+
+<p>The pkg-config files for
+gtk+ 2.0 and dependencies will need to be set correctly if they haven't
+already been.
+
+<p>Look in your mono installation/lib/pkgconfig, such as,
+<pre>
+F:/cygwin/home/DanielMorgan/mono/install/lib/pkgconfig
+</pre>
+
+<p>You will find files like: gtk+-2.0.pc
+
+<p>Edit the line that says
+
+<pre>
+ prefix=something
+</pre>
+
+<p>And set it to your mono installation prefix, such as,
+
+<pre>
+ prefix=F:/cygwin/home/DanielMorgan/mono/install
+</pre>
+
+<p>Do this for all the .pc files in that directory. If there are not any, then
+you will need to create them. Or get them from somewhere like the dev
+packages at
+<a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">here</a>
+
+
+** GTK# On Solaris
+
+ TODO
+
+** GTK# On AIX
+
+ TODO
diff --git a/web/hackers b/web/hackers new file mode 100644 index 00000000000..5220e5a13b7 --- /dev/null +++ b/web/hackers @@ -0,0 +1,31 @@ +* Mono Hackers Hall Of Fame + +Without the help, the skills and the time of many passionate developers outside of +the Ximian Mono team, Mono would not be where it is today. + +Many of them do it for fun, some do it because they really want a nice CLR they +can hack on, some do it because they need a working solution to some development +issues and mono is the ideal tool for the job. + +Some of them may start contributing because they want a mention in the +<b>Mono Hackers Hall Of Fame</b>! Whatever the cause, join us in a big<br> +<h1 align="center">Thank you!</h1> + +* Mono Hackers + +** Sergey Chaban + +Sergey has been a long time contributor to the project, from the early +work on the class libraries that were critical to Mono's origin: every +time you use a Hashtable in Mono, it runs Sergey's code, to the +low-level optimizations on the JIT engine and to his work on ILASM and +the PEToolkit. And countless other things. + +** Nick Drochak + +The first, deserved, entry in the <b>Mono Hackers Hall Of Fame</b> is for +Nick Drochak, who joined us in the first days of Mono and built the testing +infrastructure for the C# assemblies, fixed tons of bugs and even adventured +himself in the lands of the C runtime. His work is invaluable for keeping +Mono on the right track through the daily changes in the codebase. + diff --git a/web/ibmdb2 b/web/ibmdb2 new file mode 100755 index 00000000000..3c149563380 --- /dev/null +++ b/web/ibmdb2 @@ -0,0 +1,132 @@ +* IBM DB2 Data Provider +<ul> + <li>Exists in namespace DB2ClientCS and assembly Mono.Data.DB2Client</li> + + <li>The source code exists at mcs/class/Mono.Data.DB2Client</li> + + <li>Requires the Call Level Interface to IBM DB2 shared library. This + is db2cli.dll on Windows. The IBM DB2 CLI API is very similar to the ODBC API. If + you take a look at Mono's System.Data.Odbc ODBC provider, you will see the + DllImport's have similiar function names.</li> + + <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a> can be downloaded from IBM.</li> + + <li>IBM DB2 Provider created by Christopher Bockner.</li> +</ul> + +** Current Status + +<ul> + <li>Compiles on Windows and Linux. Works on Windows. Still needs to be tested on Linux.</li> + + <li>Able to connect to IBM DB2</li> + + <li>Able to execute DML, such as, CREATE TABLE via ExecuteNonQuery()</li> + +</ul> + +** Action Plan + +<ul> + <li>Still needs work to get it to retrieve data via ExecuteReader() and + use the data reader to read data.</li> + +</ul> + +** Testing + +In order to test. +<ul> + <li>Have working mono and mcs setup</li> + + <li>Have access to an IBM DB2 database. If you do not have access, download the + <a href="http://www-3.ibm.com/software/data/db2/">IBM DB2</a> software. There + are versions for Windows, Linux, AIX, and Sun Solaris.</li> + + <li>Make sure the assembly Mono.Data.DB2Client.dll was built and installed + where the other class libraries are installed.</li> + + <li>If you do not have the source to mcs, get the source from + <a href="http://www.go-mono.com/download">here</a></li> + + <li>In mcs/class/Mono.Data.DB2Client/Test/DBConnTest, you will find + a DBConnTest.cs.</li> + + <li>To build DBConnTest: + <ul> + <li>On Unix:</li> +<pre> +mcs DBConnTest.cs -r System.Data.dll -r Mono.Data.DB2Client.dll +</pre> + </li> + <li>On Windows via Cygwin: +<pre> +mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe DBConnTest.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r Mono.Data.DB2Client.dll +</pre> + </li> + <li>To run it on mono: +<pre> +mono DBConnTest.exe database userid password +</pre> + </li> + </ul> + </li> + + <li>C# Example: +<pre> + using System; + using System.Data; + using Mono.Data.DB2Client; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "DSN=sample;UID=db2admin;PWD=mypass"; + IDbConnection dbcon = new DB2ClientConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + string sql = + "CREATE TABLE mono_db2_test1 ( " +
+ " testid varchar(2), " +
+ " testdesc varchar(16) " +
+ ")"; + dbcmd.ConnectionString = sql; + dbcmd.ExecuteNonQuery(); + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r Mono.Data.DB2Client.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r Mono.Data.DB2Client.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> + +</ul> + diff --git a/web/ideas b/web/ideas new file mode 100644 index 00000000000..0a97cdcc4d2 --- /dev/null +++ b/web/ideas @@ -0,0 +1,112 @@ +* Ideas + + There are many pending classes that need to be implemented. Those have + the highest impact in the Mono project: the sooner they are done, + the sooner we can start using this platform to create new and + exciting applications. + + That being said, if you are not very excited about working on class + libraries, here is a list of other related projects or tools that might + be useful to the Mono project. + + Here are a few ideas of tools, classes and projects that you + could start. More are forthcoming. + +<a name="runtime"> +** Runtime + + We need a verifier that can be run on an executable (assembly) + and tells whether the metadata for the executable is correct + or not. It should report any anomalies. + + For a list of anomalies in assemblies, check the various assertions + that are described on the ECMA documentation. + + This will help test our generated executables and can be also + used as an external verifier. + +<a name="classes"> +** Classes + + <ul> +TODO=jxta,The JXTA Peer to Peer foundation + * Implement a JXTA protocol implementation: + <a href="http://www.jxta.org">http://www.jxta.org</a> + +TODO=camel,Mail API + * Implement a Mail API, similar to Camel or JavaMail (Camel has + significant architecture features that are required on a real + mailer). + + You can check the current C + <a href="http://cvs.gnome.org/bonsai/rview.cgi?dir=evolution%2Fcamel"> + Camel implementation</a>. + + Such an implementation could be used both with + Microsoft .NET and Mono. + +TODO=multimedia + * Interfacing to Multimedia systems. You might want + to look into the Quicktime API. I know <a + href="mailto:vladimir@ximian.com">Vladimir</a> has + researched the problem before + + </ul> + +<a name="projects"> +** Projects + + <ul> +TODO=xmlStorage, + * Implement an xmlStorageSystem for the CLI: + <a href="http://www.soapware.org/xmlStorageSystem"> + http://www.soapware.org/xmlStorageSystem</a> + +TODO=guavac,Java compiler for .NET + * You could take one of the existing Java compilers + (Guavac comes to mind as it is so nice) and modify + it to generate .NET code rather than JVM byte + codes. + + This should be a pretty straightforward task. + Guavac has the advantage of being written in C++ and + it could be compiled with the Microsoft Managed C++ + compiler and produce a .NET executable with it. + +TODO=CORBA,CORBA implementation + * Build a CORBA interoperability engine for the CLR. + You do not need to do all of the work, just talking + the protocol will get us a long way (<a + href="http://www.omg.org">The OMG site</a> has the + CORBA specs). + + Get in touch with David Taylor (dtaylo11 at bigpond + dot net dot au) as he has been working on this + project. + +TODO=Bonobo,Bonobo for Mono + * Once CORBA is done, implement the Bonobo interfaces + to allow people to use Bonobo components in Mono and + Mono components with Bonobo. The best of both worlds! + +TODO=moniker,Object Naming System with Monikers + * A naming space for Mono. An object naming space is + a very powerful tool. Bonobo implements a moniker + system that is more powerful than the original + moniker concept that was pioneered by COM/OLE in the + Microsoft world. + + Our implementation builds on a concept, and we have + made it simpler, more powerful, more extensible and + a much better mechanism than the equivalent monikers + on Windows. + + Implementing Mono monikers would benefit both + Windows users using .NET and Mono users on Unix and + Windows. + + Here is <a + href="http://primates.ximian.com/~miguel/monikers.html">an + overview of the moniker system</a> in Bonobo. + + </ul> diff --git a/web/index b/web/index new file mode 100644 index 00000000000..6732073f671 --- /dev/null +++ b/web/index @@ -0,0 +1,2152 @@ +<link rel="alternate" type="application/rss+xml" title="RSS" href="index.rss"/> + +<table> + <tr> + <td> + <a href="http://www.ximian.com">Ximian</a> announced the + launch of the Mono project, an effort to create an open source + implementation of the .NET Development Framework. + + Mono includes: <a href="c-sharp.html">a compiler</a> for the + C# language, a <a href="runtime.html">runtime</a> for the + Common Language Infrastructure (also referred as the CLR) and a + set of <a href="class-library.html">class libraries</a>. The + runtime can be <a href="embedded-api.html">embedded</a> into your + application. + + Mono has implementations of both <a href="ado-net">ADO.NET</a> + and <a href="asp-net">ASP.NET</a> as part of its distribution. + + You can read our <a href="rationale.html">rationale</a> for + this project. If you have questions about the project, please + read our list of <a href="faq.html">Frequently Asked + Questions</a> or <a href="mailto:mono-list@ximian.com">contact us.</a> + + You might also want to <a href="download.html">Download the + source</a> for our work so far. Grab a <a + href="snapshots">snapshot</a> of our current work, or <a + href="http://cvs.hispalinux.es/cgi-bin/cvsweb/?hidenonreadable=1&f=u&logsort=date&sortby=file&hideattic=1&cvsroot=Mono">browse + the sources</a> + + You might want to <a + href="mailing-lists.html">subscribe</a> to our mono-list + and mono-announce-list + + You can contact the team at: <a + href="mailto:mono-list@ximian.com">mono-list@ximian.com</a> + </td> + <td> + <table border=1> + <tr> + <td colspan="3"> + <b><center>Mono Status</center></b> + </td> + </tr> + <tr> + <td> + <b><a href="c-sharp.html">C# Compiler</a></b> + </td> + <td> + <b>Self hosting on Linux</b><br> + Self hosting on .NET. + </td> + </tr> + <tr> + <td> + <b>JIT</b> + </td> + <td> + Linux/x86 working. + </td> + </tr> + <tr> + <td> + <b>Interpreter</b> + </td> + <td> + Working:<br> + Linux/x86, Linux/PPC, S390<br> + In progress:<br> + StrongARM, SPARC. + </td> + </tr> + <tr> + <td> + <b><a href="class-status.html">Classes</a></b> + </td> + <td> + All assemblies compile. + </td> + </tr> + <tr> + <td> + RSS feed: + </td> + <td> + <a href="index.rss"><img src="images/xml.gif"></a> + </td> + </tr> + </table> + </td> + </tr> +</table> + +@item Jan, 17th: DB2 provider, MacOS X + + Christopher Bockner has contributed a DB2 System.Data client. + + MacOS X support on the runtime has been integrated into the + distribution, and MCS works with it. + + Zoltan has managed to get <a + href="http://radio.weblogs.com/0109845/">IKVM</a> (a Java VM + for .NET) to run with Mono. The HelloWorld.class runs with + the Mono runtime. + +@item Jan, 13th, 2003: Mono 0.18 released + + Mono 0.18 has been released. Check out the <a + href="archive/mono-0.18">release notes</a> for an overview of + the changes. You can get it <a href="download.html">here</a>. + +@item Jan 10th, 2003: Mono Weekly News. + + A new issue of the <a + href="http://lists.ximian.com/archives/public/mono-list/2003-January/004903.html">Mono + Weekly News</a> has been published. + + Check out the <a href="crypto.html">Crypto status</a> page + that Sebastien has put together. + +@item Jan 3rd, 2003: Glade#, Code Coverage, Apache, MBas, Debugger. + + Rachel has made Glade# use attributes so binding C# widgets to + the designed widgets is now easier than ever. Alp has + improved this to use implicit names as well. + + Martin's Mono debugger now has support for multi-thread + debugging. Special feature: breakpoints can be defined in a + per-thread basis now. + + Daniel López has checked in his Apache module to integrate + Mono and Mono's ASP.NET support as an Apache module. Gonzalo + has folded his new Mono hosting classes into this module (they + are now shared between XSP and mod_mono). You can get the + mod_apache from CVS (module name: mod_mono). + + Mono Basic improvements: Marco has added support for more + statements on the grammar. + + Zoltan has <a href="http://www.nexus.hu/vargaz2/">posted</a> + his Code Coverage analysis tool for Mono. + +@item Dec 17th, 2002: Mono: Commercial uses. + + <a href="http://www.tipic.com">Tipic</a> today <a + href="http://www.ximian.com/about_us/press_center/press_releases/index.html?pr=tipic_mono">announced</a> + their work on porting their Instant Messaging Server platform + to run on Mono. + + <a href="http://www.winfessor.com">Winfessor</a> also <a + href="http://www.winfessor.com/press.asp">announced</a> the + availability of their Jabber SDK to run on Mono. + + Also two weeks ago we mentioned <a + href="http://www.openlinksw.com">OpenLink Software's</a> <a + href="http://www.ximian.com/about_us/press_center/press_releases/index.html?pr=openlink_mono">announcement</a> + of their product, also using Mono. + +@item Dec 10th, 2002: Gtk# 0.6 released; Mono 0.17 packages for Windows and Debian. + + Mike Kestner <a + href="http://lists.ximian.com/archives/public/mono-list/2002-December/003961.html">announced + Gtk# 0.6</a>. This new release includes many new features and + bug fixes, and is the perfect companion to the <a + href="archive/mono-0.17">Mono 0.17</a> release. + + Johannes has contributed a Windows-ready package of Mono 0.17, + and its available from our <a + href="download.html">download</a> page. + + Alp Toker has <a href="http://www.atoker.com/mono/">Debian packages</a> + +@item Dec 9th, 2002: Mono 0.17 has been released + + Mono 0.17 has been released. Check out the <a + href="archive/mono-0.17">release notes</a> for a more detailed + list. You can get it <a href="download.html">here</a>. + + Many new features as well as plenty of bug fixes. Many new + System.Data providers and a more mature System.Web (ASP.NET) + which can now be hosted in any web server. A simple <a + href="archive/xsp-0.2.tar.gz">test web server</a> to host + asp.net has been released as well. + + This version also integrates Neale's s390 port. + + This release also includes a new exception handling system + that uses the gcc exception information that vastly improves + our internalcall speed (15% faster mcs compilation times). + +@item Dec 8th, 2002: VB.NET, Oracle Provider. + + Marco has got the Mono Basic compiler up to speed (support for + classes, modules, expressions, object creation, method + invocation, local variables, and some statements). The + compiler is based on the work from Rafael Teixeira on MCS. + + Screenshots: <a + href="http://modgb.sourceforge.net/monobasic_snap.png">in + Windows doing Windows.Forms</a> and in Linux doing <a + href="images/gtk-vb.png">VB with Gtk#</a> (courtesy of Alp). + + Daniel Morgan has checked in his Oracle provider to the CVS + repository as well. + +@item Nov 27th, 2002: Press release, tutorials, Windows Forms, ADO.NET, Magazine. + + <a + href="http://www.business2.com/articles/mag/0,1640,45454,FF.html">The + Penguin Takes Flight</a>: an article written by Erick + Schonfeld appears on the December issue of <a + href="http://www.business2.com/">Business 2.0</a> magazine. + + <a href="http://www.openlinksw.com">OpenLink</a> and <a + href="http://www.ximian.com">Ximian</a> made <a + href="http://www.ximian.com/about_us/press_center/press_releases/index.html?pr=openlink_mono">joint + announcement</a> on the plans of OpenLink to ship their <a + href="http://www.openlinksw.com/virtuoso/index.htm">Virtuoso</a> + server on Unix using Mono. + + Martin Willemoes's <a href="gnometutorial">GNOME.NET + tutorial</a> is now available from the main Mono site. This + tutorial is a collaborative effort to teach developers how to + use Mono to create Mono applications using <a href="http://gtk-sharp.sf.net">Gtk#</a> + + Dennis Hayes has posted and <a + href="http://lists.ximian.com/archives/public/mono-list/2002-December/003800.html">update</a> + on the work to get Windows.Forms working on Mono. There is a + new test application that people can use to test their + controls. If you are interested in working on Windows.Forms, + you can participate in the <a + href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mono-winforms + mailing list</a> + + Brian Ritchie has been working on an ADO.NET <a + href="http://brianritchie.webhop.net/ideas/adocodegen.aspx">data + layer</a> and an <a + href="http://brianritchie.webhop.net/ideas/appserver.aspx">application + server</a> for Mono. + + Dan Morgan has checked in his Oracle provider, and Tim Coleman + continues to work on the TDS implementation of the data classes. + + The rest of the team has been working on bug fixing in the + runtime, the compiler, and the class libraries. Also, + compilation speed has increased recently by performing a + number of simple optimizations in the compiler. + +@item Nov 19th, 2002: Crypto update; Books; Gtk# Datagrid; .NET ONE Slides + + Sebastien has got DSA and RSA signatures <a + href="http://lists.ximian.com/archives/public/mono-list/2002-November/003497.html">working</a> + as well as RSA <a + href="http://lists.ximian.com/archives/public/mono-list/2002-November/003502.html">encryption</a>. + We now distribute Chew Keong TAN's BigInteger classes. + + Brian has contributed a System.Data multiplexor in Mono, it + can be found in the Mono.Data assembly. The details of this + new technology are <a + href="http://lists.ximian.com/archives/public/mono-list/2002-November/003400.html">here</a>. + It works in Mono and the .NET Framework. + + Larry O'Brien has announced the candidate book for <a + href="http://lists.ximian.com/archives/public/mono-list/2002-November/003500.html"> + Thinking in C#</a>. The book is Mono-friendly. + + Another book that covers mono (available in German only) is <a + href="http://www.databecker.de/frames.php?PHPSESSD=4948515556575049525459495248485949485348&PHPSESSID=6cc68dbcfbcbacd7b82a984b0700d5d6&t=2"> + here</a>. + + Dan Morgan has implemented a DataGrid widget for Gtk#, you can + see Windows screenshots for it <a + href="images/GtkSharpDataGridScreenshot.png">here</a> and <a + href="images/SqlSharpGtkScreenshot4.png">here</a>. + + Slides from the Mono developers for the .NET ONE conference are available now: + <ul> + <li><a + href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/DotNetOneKeynote.sxi"> + Mono Keynote presentation</a> + + <li><a href="http://primates.ximian.com/~lupus/slides/embed/">Hosting the Mono Runtime</a><br> + The simple embedding of Mono in Perl is available <a + href="http://primates.ximian.com/~lupus/slides/embed/Mono-0.01.tar.gz">here</a> + + <li><a href="http://primates.ximian.com/~lupus/slides/jit/">The Mono JIT compiler</a> + + <li><a href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/Mono_C_Sharp_Overview_1007.sxi"> + Mono C# Compiler Overview</a> + </ul> + + A couple of other presentations from Miguel's trip to Europe + are available <a + href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/">here</a> + in Open Office file format. + +@item Nov 8th, 2002: Mono s390, Database work, new JIT updates. + + Neale Ferguson has contributed <a href="download.html">RPM + packages</a> of Mono for the Linux/s390. + + Tim Coleman posted an <a + href="http://lists.ximian.com/archives/public/mono-list/2002-November/003329.html">update</a> + on the improvements in the System.Data + + The new JIT engine can run 72 out of our 154 tests for the + virtual machine, and it also got exception support this week. + +@item Nov 1st, 2002: TDS, Crypto, Gtk#, Winforms, bug fixes. + + Tim's SqlClient is <a + href="http://lists.ximian.com/archives/public/mono-list/2002-November/003161.html">now + capable</a> of communicating with the Microsoft SQL server + using the TDS protocol. A screenshot showing a sample client + running with <a href="http://gtk-sharp.sf.net">Gtk#</a> on + Windows is shown <a + href="images/SqlSharpGtkSceenshot3.png">here</a> + + Sebastien has made all symetric ciphers functional on all + supported modes; All the classes in Security.Cryptography are + present and the X590 certificates are now in too. Jackson has + been working on the Security classes. + + Many bug fixes all over the place: class libraries (Dick, + Piers, Ville, Zoltan, Gonzalo, Dan, Atsushi, Nick, Phillip), + compiler, runtime engine. A big thank goes for everyone who + has been providing bug reports for us to track down. + + Gaurav has been working on multiple WebControls. Gonzalo migrated + the ASP.NET engine to use POST for interaction. + + In the Gtk# land saw the integration of gda, gnome-db and GStreamer + bindings. + + Windows.Forms classes now build on Linux and Windows, check + out the status pages for areas of collaboration. + +@item Oct 24th, 2002: S390 support, XSP/ASP.NET, Win32 contributors, TDS. + + Today Neal Ferguson's support for the IBM S390 was checked + into CVS. + + The XSP processor has been fully integrated into the + System.Web assembly, and Gonzalo has finished the hosting + interfaces in Mono. This means that it is possible to embed + ASP.NET with the same APIs used in Windows, and is possible to + easily embed it with Apache for example. The XSP module has + now become a shell for testing the System.Web classes. + + We are looking for contributors that know Win32 to contribute + to the Windows.Forms implementation. If you want to help + write some controls using the Win32 API, get in touch with our new <a + href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mono-winforms-list@ximian.com + list</a> mailing list. + + Tim's TDS System.Data set of classes can now talk to SQL + servers using the TDS protocol (version 4.2) with + connection pooling. Currently it can connect, run + transactions, update/insert/delete, and read some types. A + data adapter is also coming soon. + +@item Oct 21th, 2002: Crypto, Winforms list, Database, GConf, Debugger. + + Sebastien Poliot has made a lot of progress, he reports that + DES and TripleDES have been fixed; Rijndael and CFB modes + still have problems in some configurations and some areas that + are not supported by the .NET framework. + + Last week we created a new <a + href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mailing + list</a> to discuss the Mono Winforms implementation. + + Tim has started a full C# implementation of the TDS protocol + and the providers, and Brian continues his work on his ODBC + binding. + + Rachel Hestilow has also checked in a binding for GConf. This + binding <a + href="http://toxic.magnesium.net/~hestilow/gconfsharp/intro.html">is + unique</a> in that it uses some features in the CLI to support + complex data types, and allows the user to keep only one + representation of the types instead of two (the master types + is defined in CLI-land). Also Property Editors (<a + href="http://primates.ximian.com/~miguel/shots/gconf-shot.png">shot</a>) + simplify the creation of user interfaces that bind their + configuration to backend keys, following the <a + href="http://developer.gnome.org/projects/gup/hig/1.0/">GNOME + Human Interface Guidelines.</a> + + Martin is now on vacation, but before leaving he produced a + number of documents detailing the state of the debugger. The + major missing feature is full support for debugging unmanaged + applications (it requires dwarf-2 handlers for types). We + will do some polishing of the user interface (<a + href="http://primates.ximian.com/~miguel/shots/debugger-4.png">new + shot</a>) to expose the existing and rich functionality to the + users and try to release a preview of the debugger at the same + time as Mono 0.17. + +@item Oct 14th, 2002: Crypto, Database work, Debugger, Documentation. + + Brian, Daniel and Rodrigo have been busy working on the ODBC + provider for Mono. Daniel posted some <a + href="http://lists.ximian.com/archives/public/mono-list/2002-October/002755.html">updates</a>. + Brian posted <a + href="http://lists.ximian.com/archives/public/mono-list/2002-October/002758.html">details + about the ODBC.NET</a> provider. + + Also Sebastien Pouliot has been improving the various + cryptographic classes in Mono, something that we had not done + in quite some time. We are looking for a way to handle + big-nums. We need either a managed or unmanaged set of + classes for handling large numbers, and some volunteers to + expose this functionality to C# (Either as an internal + assembly, or as a set of P/Invoke, Internal call wrappers). + + Martin has got our debugger to support adding breakpoints at + file/line combos. This was more complex than generic + breakpoints in routines, because these breakpoints are set on + routines that probably have not been JITed just yet. Martin's + focus now is on stabilizing our debugger and aim for a public + release of it. + + We have also imported the ECMA documentation into a separate + module, and with the help from Scott Bronson we will have the + necessary XSLT tools to finish our native documentation + browser for Mono. This together with the work from Adam will + be the foundation for the <a href="classlib-doc.html">Mono + Documentation Tools</a>. + +@item Oct 9th, 2002: Various Mono updates. + + Brian Ritchie, Daniel Morgan, Rodrigo Moya and Ville Palo have + been working on various database providers. The MySQL has + seen a lot of work, and a new ODBC provider is now on CVS and + more extensive regression tests have been checked in. + + Dick Porter is our background hero and keeps fixing the + low-level bugs in the portability layer. Now the Mono handle + daemon should be a lot more robust and will no longer leave IPC + regions. Gonzalo Paniagua has initiated the migration of XSP + into the System.Web class libraries now that we have a + complete HttpRuntime implementation. This means that you are + able to embed the ASP.NET processor into any web server you + want. This also includes support for the system-wide + configuration file `machine.config'. + + Martin Baulig has been busy with the Mono Debugger, you can see how + it looks <a + href="http://primates.ximian.com/~miguel/debugger-1.png">here</a> + and <a + href="http://primates.ximian.com/~miguel/debugger-2.png">here</a>. + Now local variables and breakpoints are supported, and we are + working on the UI elements to simplify their use (as seen on + the screenshot). + + <a href="http://gtk-sharp.sf.net">Gtk#</a> has seen a lot of + activity specially as we start to build larger applications. + Vladimir Vukicevic, Kristian Rietveld, Rachel Hestilow, Mike + Kestner and Miguel de Icaza have been busy improving it. + mPhoto which is a Photo management application for Mono and + Gtk# is seen <a + href="http://primates.ximian.com/~miguel/shots/mphoto-2.jpg">here</a>. + + Chris Toshok the man behind LDAP in Evolution continues to + work on the Mono.LDAP# implementation. + + Dietmar Maurer and Paolo Molaro are still busy working on our + new optimized JIT/ATC engine and are making great progress. + The code base has been designed to ease the implementation of + more advanced compiler optimizations, and optimizations can be + chosen individually so they can be tuned for a particular + processor, or use profile-based information to improve the + performance. + +@item Oct 1st, 2002: Mono 0.16 released; Debugger updates. + + Mono 0.16 has been released. Source and RPMs are <a + href="download.html">available</a>. The release notes are <a + href="archive/mono-0.16">here</a>. + + Martin's debugger can debug both managed and unmanaged code. + Recently Martin added support for locals, parameters, and + breakpoints on top of the existing infrastructure (his + debugger supported instruction-level and source-code level + single-stepping). + +@item Sep 19th, 2002: Mono Survey. + + Help us plan for the future of Mono by filing out the <a + href="http://primates.ximian.com/~miguel/monosurvey">First Mono + Survey</a> + +@item Sep 17th, 2002: Mono Hackers Hall of Fame: Sergey Chaban + + The <a href="hackers.html">Mono Hackers Hall Of Fame</a> + continues to show our appreciation to the excellent + contributors that made <b>mono::</b> a successful free + software project. + + This time the Hall of Fame welcomes Sergey Chaban. Sergey has + been a long time contributor to the project, from the early + work on the class libraries that were critical to Mono's + origin: every time you use a Hashtable in Mono, it runs + Sergey's code, to the low-level optimizations on the JIT + engine and to his work on ILASM and the PEToolkit. + + +@item Sep 16th, 2002: Documentation Tools, ILASM, Debugger, Mono LDAP, Winforms + + Adam Treat has started moving the documentation universe again. We + have a new strategy to document our APIs (given that we have + chosen <a href="classlib-doc.html">not to document the code + inline</a>). This includes the use of a master reference file + that will hold the entry points to document. All master files + for our assemblies have been checked into CVS now. + + Sergey Chaban's Mono.PEToolkit and ILASM tools have been + checked into CVS. Although ILASM is old and will soon be + updated, we wanted to get the build issues sorted out. + + Martin Baulig's Mono Debugger is still on its early stages, + but you can run and run step by step your C# code and C code + (including the Mono runtime). Dwarf-2 is required to compile + your code. The regular step, step-into, and assembly-level + step and step-into are supported. And comes with a Gtk# + UI. The debugger is written mostly in C# with some C glue + code. Most of the work is on the engine, we will be working + on making a good UI in the future. + + Chris Toshok of the Hungry Programmer's fame has checked in + Mono.Directory.LDAP, a C# wrapper for the LDAP libraries. + This is the substrate for implementing the + System.DirectoryServices assembly. + + Andrew has also continued with some of the cryptographic + classes implementation. + + After much public debate, we have chosen a new <a + href="winforms.html">strategy to implement winforms</a>. + Implementing a Gtk, Qt or Aqua based version of Winforms was + going to be almost as complex as implementing Wine itself. So + the new strategy is to only roll out a WineLib-based + implementation. + +@item Sep 4th, 2002: .NET One 2002 Program available + + The <a + href="http://www.sigs-datacom.de/sd/kongresse/dotnet_2002/index.htm">.NET + ONE 2002</a> conference in Frankfurt is now available. Paolo + will be talking about the Mono JIT and embedding the Mono + runtime in your Windows and Linux applications. Mike Kestner + will talk about <a href="http://gtk-sharp.sf.net">Gtk#</a> and + the automatic binding generator used by Gtk# and Miguel will + be talking about the Mono project on Monday's keynote and on + the Mono C# compiler on Tuesday. + +@item Sep 3rd, 2002: Apache integration + + <a + href="http://lists.ximian.com/archives/public/mono-list/2002-September/001862.html">Sterling</a> + announced an Apache module that hosts + Mono, and allows CIL code to run from within Apache, giving the + module access to the Apache runtime. This uses the Mono embedding + API. + +@item Aug 24th, 2002: Gtk# 0.4 released + + Shortly after <a href="download.html">Mono 0.15</a> was + released a fresh version of <a + href="http://gtk-sharp.sf.net">Gtk#</a> was <a + href="http://lists.ximian.com/archives/public/mono-list/2002-August/001702.html">announced</a>. + +@item Aug 23rd, 2002: Mono 0.15 released + + Mono 0.15 has been released. Source and RPMs are <a + href="download.html">available</a>. The release notes are <a + href="archive/mono-0.15">here</a> + +@item Aug 21th, 2002: Portable.NET encodings integrated into Mono. + + Rhys Weatherley has contributed the Portable.NET encoders to + the Mono class libraries. This is a great step towards + cooperation between these projects. Thanks to Paolo for doing the + merger on our side. + + His encoders are more complete than the iconv-based approach + that mono used, which was unreliable under certain + circumstances. + +@item Aug 20th, 2002: Remoting work, Resources, SPARC checkins, ADO.NET + + <b>San Francisco</b>: August 14th. Linux World Expo. + + Mark Crichton has checked in his patches to get the SPARC port + on par with the PPC port. + + Dick has checked-in the resource reader and resource writers + to the class libraries, and Dietmar checked in the C# support + code for the remoting infrastructure. + + More work on System.Data: the LibGDA (our OleDB backend) based + providers are quickly maturing, and recently they executed + their first query. + +@item Aug 13th, 2002: MCS news, Gtk# progress, Windows.Forms, ADO.NET + + Martin Baulig has been fixing all the known bugs in the C# + compiler and now has moved into improving the compilation + speed and the generated code quality of MCS. Today we got a + 50% speedup in the bootstrap of MCS going from 24 seconds to 12 seconds. + + Gtk# has been making a lot of progress, some interesting + corner cases are now supported:, you can now create canvas items as + well as using the tree widget. Here is a shot of <a + href="images/mocil.png">MonoCIL</a>. + + On the runtime front, focus has been on improving remoting + support, exception handling, as well as completing the support + for structure marshaling. + + Patrik is also back in action: the HttpRuntime infrastructure + is rapidly improving, and Gonzalo is working into moving XSP + into our main class library and providing the missing pieces + to integrate with Patrik's code. + + Dennis and his team are working on a WineLib-based + implementation of Windows Forms to guarantee that the corner + cases of Windows.Forms can be handled, and we are back on track again. + + A lot more work on the ADO.NET and WebServices has also been + checked into CVS. + +@item Aug 1st, 2002: Mono Hackers Hall of Fame + + The <a href="hackers.html">Mono Hackers Hall Of Fame</a> has been started + to show our appreciation to the excellent contributors that made <b>mono::</b> + a successful free software project. + + The first, deserved, entry goes to + Nick Drochak, who joined us in the first days of Mono and built the testing + infrastructure for the C# assemblies, fixed tons of bugs and even adventured + himself in the lands of the C runtime. His work is invaluable for keeping + Mono on the right track through the daily changes in the codebase. + +@item Looking for volunteers + + We are looking for volunteers to help complete various pieces + of Mono and help move the project forward, we need + contributions to: + + <ul> + * More tests to the existing class libraries. + + * Finish existing class libraries, check our <a + href="class-status.html">class status</a> pages to see + all the missing things. There are open tasks all over + the place: XML, Database access, enterprise services, + configuration, ASP.NET, Drawing APIs, and more. + + * Since we have now ASP.NET running, we would like to + create an ASP.NET application to maintain our class + library documentation. + + We have some special needs (read them <a + href="classlib-doc.html">here</a>). There is a + prototype written using Windows.Forms, but we believe + it will be faster to have this done using ASP.NET (and + it is also a nice way of stress testing it). + + * Support for the VB runtime: we need contributions + to make our VB runtime mature enough to host + applications compiled with the VB.NET to run with + Mono. + + * We need people to help write the documentation: you + can start editing our XML files by hand, and once we + have the ASP.NET tool, upgrade to that. + </ul> + +@item July 31st, 2002: Flow Analysis + + Martin has checked into CVS the data flow analysis patch for + MCS, this means that we now correctly implement definite + assignment in the C# language. + +@item Jul 31st, 2002: Most ASP.NET controls render, Gtk# structs. + + Gonzalo <a + href="http://lists.ximian.com/archives/public/mono-list/2002-August/001234.html">posted + an update</a> on the ASP.NET widgets that are still pending. Patrik is back, and he is + working with Gonzalo to streamline the pipeline + + Rachel quietly committed to Gtk-Sharp support for marshaling + structures (very important for Gtk#). This uses extensively + the new marshaling code that Dietmar added to the runtime. + + Dietmar is also now sharing more code for P/Invoke using his + intermediate representation. Another step to share more code, and + simplify the porting and maintenance process. + +@item Jul 27th, 2002: NGEN tool for Mono. + + Zoltan <a + href="http://lists.ximian.com/archives/public/mono-list/2002-July/001117.html">announced</a> + the availability of his CIL to C compiler. This allows your Mono assemblies to be pre-compiled + and optimized by GCC in your platform, increasing the speed significantly of your code. + +@item Jul 26th, 2002: Mono 0.13 has been released. + + <b>Mono 0.13 has been released!</b> (details <a + href="archive/mono-0.13">here</a>). Get + your sources for the <a + href="archive/mono-0.13.tar.gz">runtime</a> and + <a href="archive/mcs-0.13.tar.gz">compiler and class libraries</a>. + <p> + Alp made Debian packages and they are <a + href="http://www.atoker.com/mono/">here</a>. Cristophe made + packages for Red Hat and they are <a + href="http://mono.baselabs.org/software">here</a>. + And Windows packages have been <a href="http://www.superin.formativ.net/mono/mono.htm">contributed</a> + +@item Jul 23rd, 2002: Mono Verifier, System.Web.Services, ASP.NET samples. + + Mono now has a verifier. It is used by the runtime, or you can invoke it manually to + verify an image by using the `pedump' tool. + + Tim Coleman has started work on the System.Web.Services + assembly (you can also track the status here on the web page). + Contact him if you want to help in this assembly or with the + associated web service tools. + + Various samples for ASP.NET have landed in CVS. + +@item Jul 20th, 2002: Spanish Mono Tutorial. + + A Spanish tutorial on using Mono is <a + href="http://mono.es.gnome.org/tutoriales/mono-linux/">here</a>. + Also the <a + href="http://mono.es.gnome.org/tutoriales/mono-puf/">FAQ</a> + has been translated as well. + +@item Jul 19th, 2002: File handle redirection, Embeddable Mono and Mono Linux compilation. + + Dick's code for file handle redirection is complete and has + now landed on the CVS repository. + + The Mono runtime can now be embedded into your application + (also known as "CLR hosting"). See the sample in + mono/samples/embed. This allows your application to link with + the Mono runtime, then your C code can call into the C#/CIL + universe and back. + + Peter Williams and Martin contributed some Makefiles to + compile all of Mono on Linux. Details are <a + href="http://lists.ximian.com/archives/public/mono-list/2002-July/000916.html">here</a>. + +@item Jul 17th, 2002 + + The first documentary on Ximian's development team is now + available online, from young director <a + href="mailto:erik.pukinskis@uconn.edu">Erik Pukinskis</a>: <a + href="http://www.ximian.com/devzone/projects/codemonkey.html">"Code + Monkey At Work"</a>. + + A Tutorial on getting Mono installed from sources is now <a + href="http://www.go-mono.com/mono-beginning/x70.html">online</a>. + + More progress on the ASP.NET front: user defined controls are + now being rendered, as well as many of the sample programs + from www.asp.net. Gonzalo's work can be found on module XSP + (this implements the .aspx compiler). + + Sergey Chaban has got Gtk# working on Windows, you can see + some screenshots: <a href="sshots/Gtksharp-1.jpg">sample apps</a> and + <a href="sshots/Gtksharp-2.jpg">running with a Russian charset</a>. + +@item Jul 16th, 2002 + + Paolo today got mono to complete host itself on Linux. This + means that we can now compile the `corlib' using the Mono C# + compiler and the Mono runtime. + + Compiling the corlib was rather tricky, because the types that + the compiler uses during the compilation process will come + from the source code it is compiling. + + After a few months of work, we have finally fleshed out all + the remaining bugs. Now the next step is to update the makefiles + to compile with the Mono tool-chain. + + A recapitulation: + <ul> + * The Mono C# compiler was able to compile itself on December 28th, 2001. + The resulting image contained errors though. + + * The Mono C# compiler was able to self-compile in on + January 3rd, 2002. Becoming a self-hosting compiler on Windows. + + * The Mono runtime matured enough by March 12, 2002 that it + was able to bootstrap the Mono C# compiler on Linux using our interpreter. + This means that our development tool was self sufficient. + + * On March 26th, the JIT engine was fixed, so we could use this to + run the compiler on Linux. + + * Martin fixed the remaining bugs in the compiler that stopped it from + compiling the `corlib'. The resulting image still contained errors though. + + * On July 8th, Radek got the PowerPC port to bootstrap + the C# compiler. This is important, because it exposed + various tricky issues in a big-endian system. + + * Today: we can bootstrap the compiler using libraries + and the compiler compiled with itself on Linux. The process is complete. + </ul> + + In the meantime, Dietmar has quietly implemented the remaining + pieces of Marshalling in the Mono runtime. This is very + important for the Gtk# guys to move on with their bindings. + + To make things more interesting, he replaced most of the + architecture specific code generation for trampolines + (delegates, invocations, function and p/invoke trampolines) to + use CIL. This CIL is then compiled on the flight by the JIT + Compiler engine. By doing this, we have reduced the burden to + port the JITer to new architectures, and that our trampoline + code is cross platform. + +@item Jul 9th, 2002 + + Ajay was the first to notice <a + href="http://lists.ximian.com/archives/public/mono-list/2002-July/000641.html"> + Mono's first birthday</a>. + + In a year, we have achieved plenty: + <ul> + * 94 contributors with CVS access (84 non-Ximian developers). + * A complete CLI implementation: + <ul> + <li> A fast and performing x86 JIT engine (inlining, constant propagation). + <li> An interpreter for other systems (PPC, Sparc, StrongArm). + </ul> + * A self-hosting C# compiler, which can compile its class libraries. + * 37,140 file changes in CVS. + * 92,000 lines of C code. + * 437,000 lines of C# code (compiler, classes, tests) + * A working core for ASP.NET and ADO.NET. + * Major subsystems are functional: RegularExpressions, + System.XML, XML.Schema, System.Data, System.Web. + * The Gtk# project, which is maturing rapidly. + </ul> + + Thanks to everyone who has made Mono possible with their + feedback, regression tests, their comments, their help on the mailing + list, code contributions, complete classes, bug reporting, the + countless hours of bug hunting. This project would not have + been possible without every contribution. + + It has been a great year for everyone involved in the + project. I think we have built a new and exciting community. + + Now we have a solid foundation to build on, so this next year + looks even more exciting: not only because we will see more + Mono applications, but we will begin using Mono as an + `library' to be linked with applications that want to get + scripting-like features; Gtk# is our ticket to create nice + GNOME applications; And we will be developing CORBA bindings + to integrate with other object systems. + + Also, for those interested in optimizations and tuning, this + year we will get to play with more advanced optimizations and + all kinds of interesting research ideas for improving Mono + code generation. + + A special thanks to the Mono developers at Ximian for managing + to survive their manager and a special thanks to our + regression test marshal Nick Drochak, who has been hunting + down, and fixing code in our class libraries and keeping us on + track for so long. + +@item Jul 8th, 2002 + + Radek today fixed the last bugs to get Mono to self host on + Linux/PowerPC. + + Alp Toker has released version 0.5 of <a + href="http://www.atoker.com/phonic/">Phonic</a>, a media + player for .NET. Phonic makes extensive use of Mono-developed + technologies such as Gtk# and csvorbis (Ogg player ported by + Mark). Hopefully we will be seeing many more exciting + applications like these in the near future. + + Dietmar has been moving a lot of the architecture specific + code in the JIT engine to our internal representation. This + means that porting the JIT is simpler now, as there is less + architecture-specific code to maintain. The inliner, constant + folder and constant propagation are also done at the + architecture independent layer. + + Gonzalo is now running the sample ASP.NET applications on + Linux with the Mono runtime. It still needs polishing though, + and help with the various ASP.NET controls would be + appreciated. The ASP.NET community seems more poor than the + PHP community, we need to have a few open source controls to + do things dynamic rendering (libart+gdk-pixbuf again can do + most of the work), charts and components like the kind of + thing you see in the PHP universe: to bring nice GPL code to + the masses of Windows developers, lure them into the world of + Linux. + + Dick has also got us the new Process implementation that + implements the Win32 semantics. Now only redirection is + missing. + +@item Jul 3rd, 2002 + + Listen to Paolo Molaro do a talk on Mono at the WebIT + conference in Padova, Italy this coming friday. Details are + <a href="http://www.webbit2001.org/event/eventview/534/">here</a> + + You can also see a trip report from the Gnome in the South trip: + <a href="http://primates.ximian.com/~miguel/sur.html">here</a> + + Miguel will be doing a couple of talks at the O'Reilly + conference about Mono: status update, progress and developing + applications with it. Details are <a + href="http://conferences.oreillynet.com/cs/os2002/view/e_sess/2994">here</a> + and <a + href="http://conferences.oreillynet.com/cs/os2002/view/e_sess/2996">here</a> + +@item Jun 30, 2002 + + Martin Baulig fixed the remaining bugs that prevented MCS to + compile our corlib. The compilation was tricky because of the way + MCS bootstraps the compile (internally mcs uses the types that are + being defined at that point to perform compares). + + Martin and Paolo have been working hard on fixing the + remaining issues. Currently 102 test pass and 15 fail with + our resulting corlib. + + Jesus' SoapFormatter classes are now in CVS. + + I have been redoing the type lookup system for MCS. The + interesting bit is that I did most of this work on an airplane + using MCS itself. Which is a good test that the compiler is + now a good development tool. + + Duncan, Mike and Rachel have been hard at work with Gtk#, now + there are bindings for the GtkHTML widget (the one used by + Evolution's composer). And Rachel also got the beginning of GNOME + bindings, that should simplify application development. + + A big thanks goes to Dennis Hayes for getting the + Windows.Forms work together, and committing so many stubs for Windows.Forms. + +@item Jun 25, 2002 + + I am updating the Mono site from the UNESCO offices in + Uruguay, the <a href="http://www.gnome.org/resources/calendar/roadshow/GNOMEenelSur.html">South-America trip</a> + to promote free software is going very well. + + Many news in Mono-land this week so far: + + Mike Kestner got bindings for GtkHTML last night for Gtk#, + this is using GtkHTML 2.0. + + On Monday Piers Haken <a + href="http://lists.ximian.com/archives/public/mono-list/2002-June/000380.html">contributed</a> + the core to support XPath in Mono: most of the w3c spec is + implemented (modulo a few pending bits). + + Dick checked in his implementation of the Process classes: + process forking and waiting support committed, with some functions to + query status. This was complex as we had to emulate the Win32 + environment, but this is another step to be fully compatible. + This means for example that any process can check on the + status of any other process (without the parent/child relationship) + + Of course, those interested + in only the Unix semantics can always P/Invoke the Unix calls. + +@item Jun 24, 2002 + + + Duncan has written a few sample <a + href="http://primates.ximian.com/~duncan/Mono">Gtk# demo + applications</a> (<a + href="http://primates.ximian.com/~duncan/Mono/img/ImageViewer.png">screen + shot</a>, <a + href="http://primates.ximian.com/~duncan/Mono/img/ImageBrowser.png">another</a>) + + Rachel also got the beginning of Gnome bindings (<a + href="http://primates.ximian.com/~tvgm/gnome-hello.png">screenshot</a>). + She also got some <a + href="http://primates.ximian.com/~tvgm/gtk-sharp-docs/">documentation</a> + up now. + +@item Jun 22, 2002 + + Mono's ASP.NET has rendered its first page on Linux for the + first time (Gonzalo and Paolo). + + Also, we are getting close to + self hosting. Paolo posted a <a + href="http://lists.ximian.com/archives/public/mono-list/2002-June/000345.html">list + of pending issues</a> which are now very small. + + Steam is picking up in <a + href="http://gtk-sharp.sf.net">Gtk#</a> as the bindings become more + complete and small applications are starting to emerge. Gtk# + now compiles completely on Linux. This uses a lot of the XML + libraries, which is nice to see. + +@item Jun 20, 2002 + + Gonzalo has got the Mono ASP.NET implementation can now render all Html + Controls, and 21 out of the 26 Web Controls. Session tracking is + next. Look in xsp/test for a collection of tests that render with Mono. + + Ajay has been very busy improving and extending the + XmlSerialization code. All fields had to be re-ordered to + match the Microsoft implementation. + +@item Jun 19, 2002 + + You can now download a fresh tarball of the libraries and the MCS + compiler daily from <a href="http://www.atoker.com/mono/">Alp Toker's + website</a>. + + New libgc RPMS for Redhat 7.3 are available on <a href=" + http://java.thn.htu.se/~toor/">Richard Torkar's site</a>. + +@item Jun 10, 2002 + + Ajay <a + href="http://lists.ximian.com/archives/public/mono-list/2002-June/000128.html">announced</a> + today that the reading code for XmlSchemas is almost complete. + +@item Jun 7, 2002 + + <b>Mono 0.12 is out!</b> More classes! More working code! + Better compiler! Faster runtime! Less bugs! + + You can get it <a + href="download.html#jun-7">Here</a> (quick links: <a + href="archive/mono-0.12.tar.gz">runtime</a> and <a + href="archive/mcs-0.12.tar.gz">compiler/classes</a>). + +@item Jun 3rd, 2002 + + CodeDOM implementation from Daniel Stodden has got C# output support. + +@item May 31, 2002 + + Gonzalo got the Mono XSP page parser to render its first ASP.NET + .aspx file today without using MS System.Web.Hosting classes. + It is currently on its infancy. But very good news, now we need to + upgrade our System.Web runtime to run natively on Linux. + + Sergey's code for architecture and size-specific CPBLK has + been checked into CVS. + + Paolo has checked the configuration code for Mono (to map + PInvoke dlls to other libraries). + + <a href="ado-net.html">ADO support</a>: Daniel has checked in + a modified version of the MySQL data provider from Brad. And Rodrigo + started the OleDB using LibGDA. + +@item May 27, 2002 + + An <a href="index.rss">RSS feed</a> is now available for the + Mono news. I find it surprising that there are so many tools + that process this data. + + Binaries for <a href="http://www.superin.formativ.net/mono/mono.htm">Windows</a> are + now location independent, do not require Cygwin and come with a Wizard. + +@item May 26, 2002 + + Daniel Morgan checked in his Sql# Cli tool into the + System.Data class library. + +@item May 24, 2002 + + Ajay <a + href="http://lists.ximian.com/archives/public/mono-patches/2002-May/003953.html">has + checked in</a> a major update to the System.Xml.Schema namespace. + + Gonzalo moved XSP along this week: Added support for + templates, columns inside DataGrid, HTML comments, code render + and data binding tags, style properties in style tags, + ListItem inside list controls, float and double properties. + +@item May 22, 2002 + + <a href="http://monologo.sourceforge.net/">MonoLogo</a> runs + on the Mono runtime. This <a + href="http://monologo.sourceforge.net/gtk.png">screenshot</a> shows + MonoLogo running Gtk#. + +@item May 21, 2002 + + Martin has improved the debugging infrastructure in Mono, now + it is possible to get <a + href="http://lists.ximian.com/archives/public/mono-list/2002-May/005717.html">line + number</a> information on stack traces. + +@item May 20, 2002 + + XSP <a href="asp-net">our ASP.NET</a> .aspx page parser is now + available on the AnonCVS servers. This is part of the ASP.NET + support in Mono. Gonzalo is the developer on charge of it. + + Many updates to the <a href="ado-net.html">ADO.NET + implementation</a> from Dan, Tim and Rodrigo. + + Radek got the Mono C# compiler running on Linux/PPC and + compiling most of our regression test suite. + + Lawrence has been working really hard in fixing, improving and + polishing the underlying network infrastructure. + + The Rafael and Chris have committed the beginning of the + VisualBasic.NET runtime support to CVS. + + Jesus has contributed the beginning of the SoapFormatter + +@item May 9, 2002 + + Linear register allocator has been deployed in the Mono JIT + engine. Read <a + href="http://lists.ximian.com/archives/public/mono-list/2002-May/005489.html">about + it</a> + +@item May 5, 2002 + + We are able to retrieve simple data from the database + using our ADO.NET like functionality. Only string and integer data + types are supported right now but more are in the works. + + You can find more information + at <a href="http://www.go-mono.com/ado-net.html">The Mono ADO-NET Page</a> + + Thanks goes to Chris, Daniel, Duncan, Gonzalo, Miguel, Rodrigo, Tim, + and others for these bits. + +@item May 4th, 2002 + + Rodrigo Moya announced <a + href="http://lists.ximian.com/archives/public/mono-list/2002-May/005366.html">new + LibGDA</a>: LibGDA is an ADO-like library for Unix systems. + This one removes all the CORBA and GConf dependencies, which + should make it easier to use and compile. + + This is another milestone for our <a + href="ado-net.html">ADO.NET implementation plans</a> + + We have a little surprise for everyone tracking the news on Tuesday ;-) + +@item May 2nd, 2002 + + Mark Crichton csvorbis port (C# port of Vorbis player) and + Richard Hestilow's <a href="http://monologo.sf.net">MonoLogo compiler</a> are now + on the CVS, and you can get them from AnonCVS. + + Dick implemented inter-process sharing of handles as well as + simplifying the implementation of WaitForMultipleObjects, now + we have a `handles' subsystem in Mono. This is needed to fully + emulate the handle behavior that Win32 exposes, and that the .NET API + expose to applications. + + News from the <a + href="http://gtk-sharp.sourceforge.net">Gtk#</a> front: <a + href="http://gtk-sharp.sourceforge.net/menu.png">Menu + support</a>, Mike <a + href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-May/000064.html">tells + the story</a> + +@item May 1st, 2002 + + Daily packages for <a href="http://www.debian.org">Debian</a> are available + <a href="http://www.atoker.com/mono/">here</a> + +@item Apr 26, 2002 + + Binary packages of Mono 0.11 are available for <a + href="http://www.superin.formativ.net/mono/mono.htm">Windows</a> + (Thanks to Johannes Roith) and for + <a + href="http://mono.baselabs.org/index.php/software/">Linux</a> (thanks + to BaseLabs). + +@item Apr 24, 2002 + + <b>Mono 0.11 is out!</b> Mostly performance improvements, bug + fixes and more classes are included. + + A new version of the runtime, compiler and class libraries has + been packaged for your download pleasure. Binaries are + included. The <a href="archive/mono-0.11">Release Notes</a> + are available. + + You can get it <a + href="download.html#apr-24">Here</a> (quick links: <a + href="archive/mono-0.11.tar.gz">runtime</a> and <a + href="archive/mcs-0.11.tar.gz">compiler/classes</a>). + +@item Apr 23, 2002 + + SharpDevelop 0.88a <a href="http://www.icsharpcode.net/OpenSource/SD">is out!</a> + + Congratulations to the developers behind SharpDevelop for + their new release. + +@item Apr 20, 2002 + + Some updates from the hacking lines: + + <b>The web:</b> Patrik Torstensson last week contributed the + http runtime support and started work on thread pools. This + is part of the ASP.NET support. + + <b>Docs:</b> John Barnette, John Sohn and Adam Treat have been + hacking on MonoDoc. + + <b>ADO.NET:</b> Daniel Morgan and Rodrigo Moya have been + working on the <a href="ado-net">ADO.NET</a> support, and got + the first signs of life this week (we can connect, insert + rows; do transactions: commit/rollback; SQL errors and + exceptions work). Check <a + href="mailing-lists.html">mono-patches</a> for all the + goodies. + + <b>Optimizations:</b> A number of optimizations in the runtime + made the compiler twice as fast this week: + + Early this week Patrik started the string + rewrite in the runtime. Today Dietmar finished the + constructors and deployed the new layout. + + Paolo got the JIT engine to generate profiles, which were in + turn used to find hot spots in Reflection, which he improved. + + Daniel Lewis (of Regex fame) noticed the performance issues + with our current array layout, and contributed a new array + representation. + + At the same time Dietmar started the the JIT inline code and + implemented constant propagation. These two optimizations + together are very powerful. + + <b>Bug fixing:</b> And of course everyone has been helping out + with the bug fixing (Duncan, Gonzalo, Jonathan, Miguel, Nick, + Ravi, Sergey) + + +@item Apr 18, 2002 + + Dietmar's inlining for the JIT engine just landed into + CVS. This is only a first cut and more improvements will come later. + + Patrik, Paolo, Dietmar and Gonzalo have been busy optimizing + our class libraries and runtime engine to become faster. Many changes + on CVS as well. + +@item Apr 11, 2002 + + Gtk# 0.1 "ButtonHook" has been <a + href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-April/000048.html">released</a> + + Binaries for the Mono Regression Test Suite are <a + href="archive/mono-tests.tar.gz">available</a> for + people porting the Mono Runtime to new platforms. + +@item Apr 6, 2002 + + <a href="http://www.dotnetremoting.cc/book/AdvancedDotNetRemoting.asp"> + Advanced .NET Remoting</a> from Ingo Rammer is now available. Ingo + helped us to implement the proxy support and the book is a valuable + resource for anyone interested in remoting. + +@item Apr 5, 2002 + + Transparent proxy support has been finished, congrats to + Dietmar. Our JIT engine on CVS contains the implementation. + This should enable people to test the remoting framework on + Mono. + +@item Mar 28, 2002 + + Debugging information is now generated by the compiler thanks + to Martin's work. The resulting dwarf file can be used to + single step C# code in GDB. A document will be shortly published with + the details. + +@item Mar 27, 2002 + + <b>Mono 0.10 is out!</b> The self hosting release of Mono has + been released. + + A new version of the runtime, compiler and class libraries has + been packaged for your download pleasure. Binaries are + included. The <a href="archive/mono-0.10">Release Notes</a> + are available. + + You can get it <a + href="download.html#mar-27">Here</a> (quick links: <a + href="archive/mono-0.10.tar.gz">runtime</a> and <a + href="archive/mcs-0.10.tar.gz">compiler/classes</a>). + +@item Mar 26, 2002 + + Paolo finally fixed the last bug in the JITer that stopped + us from using it to run the Mono C# compiler. Goodies are on + CVS. + + <a href="http://gtk-sharp.sourceforge.net">Gtk#</a> runs <a + href="http://gtk-sharp.sourceforge.net/gtk-hello-world.png">Hello + World</a>. Mike posted some <a + href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-March/000034.html">details.</a> + + +@item Mar 19, 2002 + + Martin has been working on our debugging infrastructure, both + on the JIT side of things (adding dward support) as well as on + the class libraries (so that MCS can start generating + debugging information). + + Jason and Kral keep working on the System.Xml namespace, + allowing Mike to move more to self-hosting his Gtk# code. + + The System.Web classes are now part of the build (and they are + also part of the class status now). Ajay contributed a large + chunk of code to the System.Xml.Schema namespace + + Dan (of regex fame) has been working on internal calls + support: moving more code from the old monowrapper to become + internal calls. + + Paolo and Dietmar are working steadily on our runtime + environment, fixing bugs, adding missing features and allowing + us to run the compiler on Linux. + + Remember to post your bug reports. + + The nice class status on the right is brought to you by + endless hacking hours from Piers and Nick. These status + report pages have been helping us track down various mistakes + in our classes (very useful, check it out for yourself) + +@item Mar 12, 2002 + + At midnight, in Italy, Paolo got the Mono C# compiler to self + host on Linux, the last bug has been squashed to self + hostingness. We have now a fully self hosting compiler in Linux. + + A release will follow up shortly. + +@item Mar 9, 2002 + + Updated the <a href="class-status.html">class status</a>, now + it is possible to use the right-side menu to browse a specific + assembly. + +@item Mar 7, 2002 + + MCS compiles on Linux! + + Today Paolo got the <a + href="http://lists.ximian.com/archives/public/mono-list/2002-March/003726.html">MCS + compiler compiling itself on Linux</a> + completely for the first time! The resulting image still contains + some errors, but the whole compiler process goes now. Later in the day + and a couple of small optimizations and bug fixes, the compile + speed was improved in 400% + + We are very close to have a complete self hosting environment now. + + Mono is temporarily using the Bohem GC garbage collector while + we deploy the more advanced ORP one. + +@item Mar 5, 2002 + + The CVS repository <a href="http://cvs.hispalinux.es/cgi-bin/cvsweb/?hidenonreadable=1&f=u&logsort=date&sortby=file&hideattic=1&cvsroot=Mono">can be browsed</a> + + Jason has got an incredible amount of work on the Xml + classes during the weekend, and Gaurav is very close to have + the complete System.Web.UI.WebControls namespace implemented. + + Martin and Duco have been killing bugs by using the recently + revamped regression test suite. + + Piers has updated our <a href="class-status.html">class + status</a> page again, with even more information available. + + The C# compiler has full constant folding implemented now and Ravi + killed bugs of bugs in the <a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FClass+Libraries&product=Mono%2FMCS&product=Mono%2FRuntime&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&order=%27Importance%27&form_name=query">Mono Bug List</a> + +@item Mar 1, 2002 + + RPMs of Mono 0.9 are available at <a href="http://mono.baselabs.org/#download">mono.baselabs.com</a> + +@item Feb 28, 2002 + + <a + href="http://lists.ximian.com/archives/public/mono-list/2002-February/003464.html">Christophe</a> + has setup his <a href="http://mono.baselabs.org">First Steps in Mono</a> web site, which + shows you a step-by-step process on getting Mono running on your system. + + RPMs of Mono 0.9 are available at <a href="http://mono.baselabs.org/index.php/software/">mono.baselabs.org</a> + +@item Feb 27, 2002 + + New <a href="class-status.html">class status</a> engine that + provides detailed information about missing functionality in + our class libraries. Nick built the cormissing tool and Piers + did the XSLT and DHTML magic. + + More compiler progress on Linux: our support runtime now + enables the compiler to compile `MIS' on Linux (MIS being + Dick's Mono sample HTTP server ;-) + +@item Feb 26, 2002 + + Paolo posted a list of <a + href="http://lists.ximian.com/archives/public/mono-list/2002-February/003266.html">ways + you can help</a> if you do not have Windows right now. Sergey followed up with + <a href="http://lists.ximian.com/archives/public/mono-list/2002-February/003268.html">his</a> + suggestions. + +@item Feb 25, 2002 + + StrongARM port from Sergey Chaban has been checked into CVS. + +@item Feb 24, 2002 + + SPARC: 44 out of 74 tests pass now (Jeff) + + Power PC: delegates are working now (Radek) + +@item Feb 22, 2002 + + <b>Mono 0.9 has been released!</b> + + A new version of the runtime, compiler and class libraries has + been packaged for your download pleasure. The <a + href="archive/mono-0.9">Release Notes</a> + + You can get it <a + href="download.html#feb-22">Here</a> (quick links: <a + href="archive/mono-0.9.tar.gz">runtime</a> and <a + href="archive/mcs-0.9.tar.gz">compiler/classes</a>). + +@item Feb 21, 2002 + + Paolo got our compiler natively to compile 117 of our tests. + Self hosting is closer every day. + + Unsafe support is finished in the C# compiler. + +@item Feb 20, 2002 + + Gaurav got DataGrid and DataGridItemCollection done. + + C# compiler: Unsafe support is mostly complete (only stackalloc is missing). + + New easy to run scripts for compiling Mono on Unix and Windows + is <a href="download.html">available</a>. We can now easily compile + Mono on Windows and Linux. If you had trouble before, use the + above scripts which will get the setup right for you. + + There are now three machines that can provide AnonCVS, just + use anoncvs.go-mono.com as the hostname for your CVSROOT and + you will get one of the machines. + +@item Feb 19, 2002 + + Do you want to see what <a href="http://people.debian.org/~lupus/mono/">Mono Looks Like?</a> + +@item Feb 18, 2002 + + Application Domains now support the two LoaderOptimization + modes: share code or do not share code, and you can control + this with the --share-code command line option. + + Paolo has now 100+ test cases run on Linux now with our class + libraries. + + PowerPC and SPARC ports are moving along (Radek and Jeff) + +@item Feb 13, 2002 + + Excellent news since the 11th, here is a quick rundown: + + AppDomains have been deployed (Dietmar). Socket work is done + (Dick). Corlib compiled with no refs to mscorlib (Dan). New + comprehensive tests for corlib bits (David). Nick is driving the + regression test suite efforts and class library completeness. + New System.Data work (Chris). Bug fixes (Paolo, Duncan, Ravi, Miguel) + + Miguel is off to the <a + href="http://www.fosdem.org">FOSDEM</a> conference in Brussels. + +@item Feb 11, 2002 + + <b>Mono 0.8 has been released!</b> + + A new version of the runtime, compiler and class libraries has + been packaged for your download pleasure. + + You can get it <a + href="download.html#feb-11">Here</a> (quick links: <a + href="archive/mono-0.8.tar.gz">runtime</a> and <a + href="archive/mcs-0.8.tar.gz">compiler/classes</a>) + +@item Feb 11, 2002 + + We would like to welcome all the new developers that have + joined the project in the last couple of days. The classes + are rapidly moving. + + An explanation of the relationship between <a + href="http://mail.gnome.org/archives/gnome-hackers/2002-February/msg00031.html">GNOME + and Mono</a>. + + Nick is still leading our test suite platform. I can not + stress how important it is to have a good regression test suite + for our platform, as buggy class libraries are what are + stopping the compiler from running completely on Linux. + + We are of course psyched to see Mono run on + non-Linux systems. Work is moving on native code generation + for StrongARM, PowerPC, and SPARC as well as porting Mono to + other systems. + + There are a couple of debates on the Mono list on implementing + a set of web server classes for <a + href="http://lists.ximian.com/archives/public/mono-list/2002-February/002911.html">enabling + ASP.NET</a> on Mono. + + Paolo also <a + href="http://lists.ximian.com/archives/public/mono-list/2002-February/002944.html"> + posted a list of pending tasks</a> to enable the compiler to run on Linux + +@item Feb 10, 2002 + + Mike Kestner has posted an <a + href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-February/000024.html">Update + on his Gtk#</a> activities. + +@item Feb 4, 2002 + + Adam has done <a + href="http://lists.ximian.com/archives/public/mono-list/2002-February/002808.html">Qt + bindings</a> for .NET. Adam is cool. + +@item Jan 29, 2002 + + Dan Lewis has contributed a major missing set of classes to + Mono: <a + href="http://lists.ximian.com/archives/public/mono-list/2002-January/002745.html"> + System.Text.RegularExpressions</a>. + + This is a fully .NET compatible implementation of the .NET regular expressions, + fully Unicode aware. This contribution is very appreciated, as implementing this + was not entirely trivial (supporting Unicode, plus a regex engine which is a super + set of the Perl regex engine). + +@item Jan 28, 2002 + + The Mono contributors have relicensed the Class Libraries under + the terms of the + <a href="http://www.opensource.org/licenses/mit-license.html">MIT X11</a> license. + + This license is an Open Source license, and is used by other projects + (most notably, the XFree86 project). + + The runtime (JIT, metadata library, interpreter) remains under + the LGPL and the C# compiler remains under the GPL. + + Our <a + href="http://www.ximian.com/about_us/press_center/press_releases/mono_partners.html">Press + Release</a> + + Press coverage: <a + href="http://news.com.com/2100-1001-823734.html">CNet</a>, <a + href="http://www.wired.com/news/technology/0,1282,50037-2,00.html">Wired</a>, + <a href="http://www.infoworld.com/articles/hn/xml/02/01/28/020128hnopennet.xml">InfoWorld</a>, + <a href="http://www.newsforge.com/article.pl?sid=02/01/27/2232231">NewsForge</a>. + +@item Jan 23, 2002 + + New mailing list: <a href="mailto:mono-patches-request@ximian.com">mono-patches@ximian.com</a>. + This mailing list will receive automatically the patches that are submitted + to the Mono CVS to any of its modules. + + This allows anyone who wants to participate in the peer-review of the + code submitted to CVS to receive patches on e-mail. It should also + expose to everyone the changes that are being done by the team every day. + +@item Jan 21, 2002 + + Dick has got a simple web server running with Mono (`MIS: Mono + Internet Server') that is mostly used to test our IO layer, a + <a href="http://primates.ximian.com/~miguel/dick-mis-server.png">screenshot</a> + + Paolo and Dietmar are busy making our runtime self sufficient on + non-Windows platforms. + + C# compiler front: A lot of focus in the past weeks after + the C# became self hosting has been in making the compiler a useful + tool for development: improve error handling, provide better error + reports, fixing all known bugs, and finally profiling of the compiler + has begun. + +@item Jan 8, 2002 + + Our compiler has been self-supporting since January 3rd. In + the meantime, we have been busy working on making it run on + Linux. Today Paolo got more work done on Reflection.Emit and + the compiler compiled `console.cs' (a sample Mono program) on + Linux. + +@item Jan 4, 2002 + + Dietmar landed the Unicode support patch. Class libraries and + runtimes are now fully Unicode aware. The details are <a href= + "http://lists.ximian.com/archives/public/mono-list/2002-January/002409.html"> + here</a> + + Last minute breaking news: Paolo got our compiler in Linux to + compile fib.cs, patches are coming tomorrow once we have + ChangeLog entries. + +@item Jan 4, 2002 + + Mike Kestner posted an update on Gtk# <a + href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-January/000021.html"><i>New + year, new direction</i></a>. + + Gtk# will be our foundation on which we will be implementing + System.Windows.Forms. + +@item Jan 3, 2002 + + Mono C# compiler becomes self-sufficient. We can now continue + development of the compiler with itself. + + Work on the class libraries is still underway for having a full + self hosting system. We hope to achieve our goal of self-hosting + on Linux before the end of the month. + + Join the fun by downloading either tonight's <a + href="snapshots">snapshot</a> or getting your sources from our + <a href="anoncvs.html">Anonymous CVS server</a>. + +@item Dec 28, 2001 + + After a lot of work, the C# compiler can compile itself. + There are still errors in the generated image, but they are + being fixed quickly. + + We will soon have the first non-Microsoft C# implementation! + +@item Dec 18, 2001 + + JIT: More work on our IO abstraction layer (Dick). + + JIT: exception handling for unmanaged code (Dietmar) + + System.Reflection: Support for PropertyInfo and + PropertyBuilder as well as the various queries for MethodBase. + + C#: Pre-processor; Rewrite of MemberLookup which fixed many of + the outstanding issues. More bug fixing allows it to compile + more programs. + +@item Dec 14, 2001 + + Dietmar has improved the register allocation and now Mono performs + two to three times as fast as it did yesterday. Amazing. + + The compiler keeps moving along, explicit interface + implementation is there. + +@item Dec 11, 2001 + + The JIT engine can now run all the compiler regression tests as + well as assorted other programs, many more opcodes added + recently. Currently the JIT engine uses a very simplistic register + allocator (just enough to allow us to focus on feature completeness) + and that will be the next major task to improve performance and + reduce spills and reloads. + + On the C# compiler front: language features are now pretty + much complete. The big missing tasks are unsafe code support, + visibility, explicit interface implementation plus static flow + analysis. There are many small bugs that need to be addressed. + + You can get your copy of the <a href="snapshots">latest Mono</a> + + More work is also required on fixing the foundation class + libraries, it is easy to find spots now since Nick got the + `make test' going. + +@item Dec 1, 2001 + + AnonCVS access to Mono is here (updated every hour). Thanks + to <a href="http://www.hispalinux.es">HispaLinux</a> and Jesus + Climent for helping to set this up. + +@item Nov 30, 2001 + + All tests from the mono runtime work with the JIT engine now + (Dietmar). + + Recursive enumeration definition in the C# compiler are + working now (Ravi). + + More work on the Web classes (Gaurav). + +@item Nov 28, 2001 + + JIT land: Paolo got GDB support into the JIT engine while + Dietmar added exceptions support to it. + + The C# compiler supports all array initializations now, and the + switch statement as well as fixing many existing bugs. Many + new more tests. + + Nick keeps working on improving our class library test suite. + + Dick has almost completed the Mono IO layer. + +@item Nov 16, 2001 + +<blockquote> + Mike Kestner has posted an <a + href="http://lists.ximian.com/archives/public/gtk-sharp-list/2001-November/000015.html">update</a> + on Gtk# development. +</blockquote> + +@item Nov 14, 2001 + +<blockquote> + Paolo today got the Mono C# compiler running <a + href="http://lists.ximian.com/archives/public/mono-list/2001-November/001941.html">on + Linux</a>. It compiles a sample program and then the sample + program is executed. + + Mutator unary operators (++ and --) in the compiler are fully + functional, they used to only work on variables, and now they + are complete. + + To sum things up: The Mono C# compiler is written in C# and + uses the .NET classes to get its work done. To make this work + on Linux work has to happen in various fronts: +<ul> + * The C# compiler is being worked on and can compile + many programs now (our test suite at this point is + made up of 40 tests). + + * The class libraries need to be mature enough to support + the compiler, particularly System.Reflection.Emit (which is + what Paolo has been working on lately). + + The compiler currently requires 103 classes from the + .NET runtime (you can get the list by running: <b>monodis --typeref mcs.exe</b> + + * The interpreter should be mature enough to run the actual + compiler byte codes and the corlib bytecodes. +</ul> + + At the same time, Dietmar is working on the JIT engine which will + replace our interpreter in production. +</blockquote> + +@item Nov 12, 2001 + +<blockquote> + Dietmar got value types working on the JIT engine. Sean has + got assembly loading in the runtime (required for NUnit). + + More progress on enumerations and attributes from Ravi. + + Nick keeps working on improving our class libraries. +</blockquote> + +@item Nov 8, 2001 + +<blockquote> + Enumerations, array access and attributes for the C# compiler are into the CVS now. + + Full array support is not complete, but moving along. +</blockquote> + +@item Nov 5, 2001 + +<blockquote> + Dietmar's new set of patches to the JIT have 20 out of 33 + tests running now. +</blockquote> + +@item Nov 4, 2001 + +<blockquote> + Mike Kestner, main Gtk# contributor has posted a very interesting <a + href="http://lists.ximian.com/archives/public/gtk-sharp-list/2001-November/000013.html"> + update</a> on his work on Gtk#. + + Ravi committed the initial support for Attributes in the + compiler. + + Many HTML Controls from Leen checked into CVS. + + Paolo checked in his new System.Reflection and + System.Reflection.Emit implementations. He has been working + steadily on this huge task for a few weeks now. This is the + foundation for the Mono C# compiler, and hence a very + important piece of the puzzle. +</blockquote> + +@item Nov 3, 2001 + +<blockquote> + Many clean ups have been going into the class library by Nick Drochak. + + Mega patch from Dietmar: he committed the flow analysis code + for the JITer. + + A lot of work has been going into the WebControls by Gaurav (4 + new controls plus improved and bug fixed base classes). +</blockquote> + +@item Nov 1, 2001 + +<blockquote> + Ravi committed the caller-side method selection of methods with + variable length arguments. Now he depends on Miguel finishing + the array handling support. +</blockquote> + +@item Oct 27, 2001 + +<blockquote> + Lots of classes for System.Web from Gaurav were committed this + morning. + + Some large recent developments: + + The Decimal implementation from Martin Weindel has been + partially integrated (we need to put the internalcalls in + place now and compile and link the decimal code). + + Derek Holden committed recently the IntegerFormatter code into + the CVS, so we got a pretty comprehensive integer formatting + engine that we can finally use all over the place. + + Compiler got support for lock as well as assorted bug fixes. + Ravi is still working on array support (and then we can + optimize foreach for the array case). + + Dietmar is busy working on flow analysis on the JITer, the + previous mechanism of generating the forest was wrong. Paolo + has been a busy bee reworking the System.Reflection.Emit + support code, and we should have some pretty nice stuff next + week. Dick on the other hand is still working on the + WaitOne/WaitAll emulation code. WaitAll is like select on + steroids: it can wait for different kinds of objects: files, + mutexes, events and a couple of others. + + Mike Kestner is busy working on Gtk# which is now using the + .defs files to quickly wrap the API. +</blockquote> + +@item Oct 18, 2001 + +<blockquote> + Reworking expressions to support cleanly indexers and + properties. <a href="http://www.nat.org/evolution.php3">11 + days</a> until Evolution 1.0 ships. + + Ximian users around the world <!--a + href="http://www.bez.it/IMAGES/nora.jpg"-->rejoice<!--/a--> with + recent C# compiler progress. +</blockquote> + +@item Oct 17, 2001 + +<blockquote> + Delegate support has been checked into the compiler + (definition and invocation); break/continue implemented. +</blockquote> + +@item Oct 15, 2001 + +<blockquote> + JIT engine supports many of the object constructs now (object + creation, vtable setup, interface table setup). + + The C# compiler now has almost full property support (only + missing bit are pre-post increment/decrement operations), + delegates are now created (still missing delegate invocation). + try/catch/finally is also supported in the compiler now. + + System.Decimal implementation is in, as well as many crypto + classes. +</blockquote> + +@item Oct 5, 2001 + +<blockquote> + Sergey has released his first version of the <b>ilasm</b> + assembler written in C#. You can get it from his web page: + <a + href="http://mono.eurosoft.od.ua">http://mono.eurosoft.od.ua</a>. + + The plan is to integrate ildasm into the Mono CVS soon. This + component should in theory also be reusable for SharpDevelop + eventually. +</blockquote> + +@item Oct 4, 2001 + +<blockquote> + Our System.Reflection.Emit implementation created its first + executable today. This means that a very simple .NET program + that was compiled on Windows was able to generate a .NET program + while running on Linux using the Mono runtime. + + The various piece of the puzzle are starting to get together: + the compiler can compile simple programs now and we are + basically focusing on completeness now. +</blockquote> + +@item Sep 28, 2001 + +<blockquote> + <a + href="http://www.icsharpcode.net/OpenSource/SD/default.asp">Sharp + Develop 0.80</a> was released today. +</blockquote> + +@item Sep 26, 2001 + +<blockquote> + More progress: more opcodes are working (Paolo); The compiler + runs up to a point in Mint (Paolo); operator overloading works + (both unary and binary) all over the place (Miguel); Completed decimal + type conversions (Miguel); New build system in place based on + Ant (Sean and Sergey); Refactored and documented the + internals of the JIT engine (Dietmar); StatementExpressions + handled correctly (Miguel). +</blockquote> + +@item Sep 21, 2001 + +<blockquote> + A couple of news-worthy items: Dick got the initial thread + support into mint; Paolo implemented many new opcodes; Dietmar + got long operations and mul/div working on the JITer; Ravi rewrote + the Method selector for expressions to be conformant; Miguel + got i++ working. All in tonight's snapshot +</blockquote> + +@item Sep 19, 2001 + +<blockquote> + Paolo has written a section on <a href="porting.html">Porting + Mono</a> to other architectures. +</blockquote> + +@item Sep 18, 2001 + +<blockquote> + <A a href="download.html#sep-18">Mono 0.7</a> has been + released (runtime engine, class libraries + and C# compiler). Check the <a href="archive/mono-0.7">Mono + 0.7 announcement</a> for details +</blockquote> + +@item Sep 17, 2001 + +<blockquote> + Mike Kestner's Gtk# (Gtk-sharp) was checked into the CVS + repository. Gtk# can run a simple hello world application. + The binding is nice, as it maps Gtk+ signals to delegates in + C#. You can see the Gtk# Hello World program <a href="src/HelloWorld.cs">here</a> + + Gtk-sharp should be available on the next snapshot set. +</blockquote> + +@item Sep 10, 2001 + +<blockquote> + Dietmar checked in his CIL tree/forest regeneration and most + importantly, the x86 instruction selector burg grammar. +</blockquote> + + +@item Sep 5, 2001 + +<blockquote> + The MCS compiler <b>can compile the sample Hello World</b> + application and generate a Windows/CIL executable that runs! + + This executable runs with the Mono Interpreter of course (see + August 28) +</blockquote> + +@item Sep 4, 2001 + +<blockquote> + Dietmar checked into CVS the `monoburg' architecture + independent instruction selector for the JIT engine. +</blockquote> + +@item Aug 28, 2001 + +<blockquote> + <b>.NET Hello World is working under Mono!</b> The latest snapshots + will let you run it. + + Hello World consists of 1821 CIL instructions, + performs 66 subroutine calls and loads 12 classes from the corlib.dll + + Good work Mono team! +</blockquote> + +@item Aug 23, 2001 + +<blockquote> + Lloyd Dupont has announced his OpenGL bindings for C#, they + are available here: <a + href="http://csgl.sourceforge.net">http://csgl.sourceforge.net</a> +</blockquote> + +@item Aug 22, 2001 + +<blockquote> + New version of the Mono Runtime, Compiler and Classes has been + <a + href="download.html#august-22">released.</a> Check the <a + href="archive/mono-0.6">0.6 announcement</a>. +</blockquote> + +@item Aug 20, 2001 + +<blockquote> + A new <a href="contributing.html#compile-service">Compilation + service</a> has been made available by Derek to allow people + without access to the <a + href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">.NET SDK</a> +</blockquote> + +@item Aug 3, 2001 + +<blockquote> + Daily snapshots of mcs and mono are now available, they will + run every night at 10pm Boston time. +</blockquote> + +@item Jul 29, 2001 + +<blockquote> + Mono Runtime 0.5 has been <a + href="download.html#july-29">released.</a> Check the <a + href="archive/mono-0.5">release notes</a> +</blockquote> + +@item Jul 25, 2001 + +<blockquote> + The slides for <A href="Presentations/O-Reilly">my + presentation</a> at <a href="http://www.oreilly.com">O'Reilly + Open Source Software Convention</a> +</blockquote> + +@item Jul 22, 2001 + +<blockquote> + Another release of the class libraries is out, check the <a + href="archive/mcs-22">MCS 22-July Release Notes</a>. You can + get the new class libraries from <a + href="download.html#july-22">here</a> +</blockquote> + +@item Jul 19, 2001 + +<blockquote> + Another release of the class libraries is out, check the <a + href="archive/mcs-19">MCS 19-July Release Notes</a>. You can + get the new class libraries from <a + href="download.html#july-19">here</a> +</blockquote> + +@item Jul 17, 2001 + +<blockquote> + Another release of the class libraries is out, check the <a + href="archive/mcs-17">MCS 17-July Release Notes</a>. You can + get the new class libraries from <a + href="download.html#july-17">here</a> + + Do not forget to check out the updated <a href="faq.html">FAQ</a>. + + Got Sean's new Class + Status web pages up. These are a lot better than mine, and + we are now keeping better track of contributors. +</blockquote> + +@item Jul 15, 2001 + +<blockquote> + Another release of Mono is out, check the <a + href="archive/mono-0.4">Mono 0.4 Release Notes</a>. Get it <a + href="download.html#july-15">here</a>. +</blockquote> + +@item Jul 14, 2001 + +<blockquote> + A <a + href="http://lists.ximian.com/archives/public/mono-list/2001-July/000399.html">new + release</a> of the + runtime, compiler and classes has been made. Get it <a href="download.html#july-14">here</a> +</blockquote> + +@item Jul 12, 2001 + +<blockquote> + I keep getting questions about my opinion on Passport, even when + Mono has <b>nothing</b> to do with it. I finally <a + href="passport.html">wrote something.</a> +</blockquote> + +@item Jul 9, 2001 + +<blockquote> + Project launched. +</blockquote> + +@item O'Reilly + +<blockquote> + Brian posted a story on <a + href="http://www.oreillynet.com/dotnet">O'Reilly Network .NET</a> +</blockquote> diff --git a/web/java b/web/java new file mode 100755 index 00000000000..adcd888f1be --- /dev/null +++ b/web/java @@ -0,0 +1,66 @@ +* Java + + <b>This is an outline on how to support Java, actual + implementations of ideas like this can be found <a href="http://radio.weblogs.com/0109845/">here</a></b> + + + It would be interesting to support the Java language as part + of the Mono project. + + You have to think of Java as various pieces: Java the + language and Java the virtual machine. + + It is possible to compile Java to .NET, as shown by the + Microsoft J# compiler. We could then allow the migration of + Java applications to the Mono runtime. + +** Native compiler + + Although a native compiler can be built, and probably should be + built using an existing compiler, a short term solution is to + build a translator from Java class files to the ECMA CIL images. + + This has the advantage that we can use an existing and tested + Java compiler to generate the code, and then we can use an automated + code compiler that compiles Java VM bytecodes to CIL bytecodes. + +** The translator. + + It would be interesting to write a semantic translator that + converts java byte codes into CIL opcodes. This is possible + because the Java byte codes are a subset of the CIL ones. + + A semantic tree needs to be constructed (very much in the + spirit of what is done in mono_analize_stack in + <tt>mono/mono/jit/jit.c</tt>. Once such a semantic tree is + constructed, we could generate the equivalent Java code. + + This has a number of interesting side effects: people can + continue to use their existing Java compilers to compile their + code, and a simple tool that converts their .class files into + a .NET assembly can be used. + +** Libraries + + We could translate the GNU Classpath libraries with the above + tools to provide the Java runtime required to host into the + Mono runtime. Some special treatment would be required for + core data types like integers, arrays and strings, and of + course reuse where possible existing classes from .NET to make + them compatible. + +** JILC - Java to IL Compiler + + This is an attempt to make the java bytecode available for the + .NET environment. + + The project attempts to generate the IL code / bytecode from the + compiled java class files. It has reached the stage of code-generation. + The issues that needs to be addressed is the mapping of java objects + to the IL objects, eg: java.lang.String to System.String. + + Gaurav Vaish and Abhaya Agarwal are currently leading this project. + The project is currently hosted at <a href="http://sourceforge.net/projects/jilc">SourceForge.Net</a>. + The official home page of the project is + <a href="http://jilc.sourceforge.net">http://jilc.sourceforge.net</a>. + diff --git a/web/jit-debug b/web/jit-debug new file mode 100644 index 00000000000..d5cfef4fcb2 --- /dev/null +++ b/web/jit-debug @@ -0,0 +1,23 @@ +* Debugging information + + Compile your programs using the `-g' flag in MCS, that will generate a file + with the extension .dbg containing the dwarf symbols for your executable. + + To get stack traces with line number information, you need to run your + program like this: + + <b> + mono --debug program.exe + </b> + + Notice that the program will need to be compiled with the -g + flag and that running with --debug will slow down the execution. + +* Mono Debugger + + A new debugger has been created in C# and using Gtk# for its + user interface, this will simplify the debugging of CLI applications. + + Stay turned for its first public release. + +
\ No newline at end of file diff --git a/web/jit-debug-sample b/web/jit-debug-sample new file mode 100644 index 00000000000..650d67f8ca9 --- /dev/null +++ b/web/jit-debug-sample @@ -0,0 +1,86 @@ +* A debugging session using a dynamically generated symbol file. + + Let's assume we have the following C# application which we want to debug: + + <pre> + using System; + + public class Foo + { + public struct MyStruct { + int a; + long b; + double c; + } + + public static void Main () + { + Int32 value = 5; + long test = 512; + + MyStruct my_struct; + my_struct.a = 5; + my_struct.b = test; + my_struct.c = 23323.5235; + } + } + </pre> + + First of all, we need to compile it and create the .il files: + + <pre> + $ mcs ./Foo.cs + $ monodis /home/export/martin/MONO-LINUX/lib/corlib.dll > corlib.il + $ monodis Foo.exe > Foo.il + </pre> + + Now we can start the JIT in the debugger: + + <pre> + $ gdb ~/monocvs/mono/mono/jit/mono + (gdb) r --debug=dwarf --break Foo:Main ./Foo.exe + Starting program: /home/martin/monocvs/mono/mono/jit/mono --debug=dwarf --break Foo:Main ./Foo.exe + 0x081e8911 in ?? () + (gdb) call mono_debug_make_symbols () + (gdb) add-symbol-file /tmp/Foo.o + Reading symbols from /tmp/Foo.o...done. + Current language: auto; currently c++ + (gdb) frame + #0 Foo.Main () at Foo.il:26 + 26 // method line 2 + (gdb) n + Foo.Main () at Foo.il:38 + 38 IL_0000: ldc.i4.5 + (gdb) list + 33 .maxstack 2 + 34 .locals ( + 35 int32 V_0, + 36 int64 V_1, + 37 valuetype MyStruct V_2) + 38 IL_0000: ldc.i4.5 + 39 IL_0001: stloc.0 + 40 IL_0002: ldc.i4 512 + 41 IL_0007: conv.i8 + 42 IL_0008: stloc.1 + 43 IL_0009: ldloca.s 2 + 44 IL_000b: ldc.i4.5 + 45 IL_000c: stfld int32 .MyStruct::a + 46 IL_0011: ldloca.s 2 + 47 IL_0013: ldloc.1 + 48 IL_0014: stfld int64 .MyStruct::b + 49 IL_0019: ldloca.s 2 + 50 IL_001b: ldc.r8 23323.5 + 51 IL_0024: stfld float64 .MyStruct::c + 52 IL_0029: ret + (gdb) until 52 + Foo.Main () at Foo.il:53 + 53 } + (gdb) info locals + V_0 = 5 + V_1 = 512 + V_2 = {a = 5, b = 512, c = 23323.523499999999} + </pre> + + As you see in this example, you need to know IL code to use this debugging method - but + it may be the only way to debug a library. + diff --git a/web/jit-debug-sample2 b/web/jit-debug-sample2 new file mode 100644 index 00000000000..4e4cc31bc4f --- /dev/null +++ b/web/jit-debug-sample2 @@ -0,0 +1,70 @@ +* A debugging session using a symbol file which has been created by MCS. + + Let's assume we have the following C# application which we want to debug: + + <pre> + using System; + + public class Foo + { + public struct MyStruct { + int a; + long b; + double c; + } + + public static void Main () + { + Int32 value = 5; + long test = 512; + + MyStruct my_struct; + my_struct.a = 5; + my_struct.b = test; + my_struct.c = 23323.5235; + } + } + </pre> + + First of all, we need to compile it with MCS, assemble the generated .s file and + create the .il files for all referenced assemblies which were not compiled with MCS: + + <pre> + $ mcs -g ./Foo.cs + $ as -o Foo-debug.o Foo-debug.s + $ monodis /home/export/martin/MONO-LINUX/lib/corlib.dll > corlib.il + </pre> + + Now we can start the JIT in the debugger: + + <pre> + $ gdb ~/monocvs/mono/mono/jit/mono + (gdb) r --debug=dwarf-plus --break Foo:Main ./Foo.exe + Starting program: /home/martin/monocvs/mono/mono/jit/mono --debug=dwarf-plus --break Foo:Main ./Foo.exe + Program received signal SIGTRAP, Trace/breakpoint trap. + 0x081e8681 in ?? () + (gdb) call mono_debug_make_symbols () + (gdb) add-symbol-file Foo-debug.o + (gdb) add-symbol-file /tmp/corlib.o +` (gdb) frame + #0 Main () at ./Foo.cs:11 + 11 public static void Main () + (gdb) n + Main () at ./Foo.cs:13 + 13 Int32 value = 5; + (gdb) + 14 long test = 512; + (gdb) + 17 my_struct.a = 5; + (gdb) + 18 my_struct.b = test; + (gdb) + 19 my_struct.c = 23323.5235; + (gdb) + 20 } + (gdb) info locals + value = 5 + test = 512 + my_struct = { a = 5, b = 512, c = 23323.5235 } + </pre> + diff --git a/web/languages b/web/languages new file mode 100755 index 00000000000..da970e0af96 --- /dev/null +++ b/web/languages @@ -0,0 +1,142 @@ +* Compilers for other languages + + Here are some other free compilers for other languages that + target .NET and should work with Mono with no problem: + + <ul> + * <a href="#ComponentPascal">Component Pascal</a> + * <a href="#MonoLogo">MonoLogo</a> + * <a href="#Oberon">Oberon</a> + * <a href="#Forth">Forth</a> + * <a href="#mbas">Mono Basic</a> (Mono's VB.NET compiler) + </ul> + + Languages which are known to run, but we have not done a + complete ran of all their regression tests to validate it: + + <ul> + * Kylix.NET. + </ul> + + Languages we would like to have supported, with links to resources: + + <ul> + * <a href="#JavaScript">Java Script</a> + * <a href="#java.html">Java</a> + * <a href="#c">C</a> + </ul> + + Some experimental languages: + + <ul> + * <a href="#Tachy">Tachy</a> (scheme-like) + </ul> + +<a name="Java"> +** Java + + There is a very interesting project to make a JavaVM for .NET + <a href="http://radio.weblogs.com/0109845/">here</a>. + Currently this will not work with Mono, as they use some + pieces of Managed C++ to implement the JNI interface. + + A workaround has been discussed, contact the author if you want to contribute. + +<a name="MonoLogo"> +** MonoLogo + + An implementation of Logo for Mono (and .NET) + + The <A href="http://monologo.sf.net">Mono Logo</a> compiler is + hosted in the <a href="ccvs.html">Mono CVS</a> repository + and also available on the <a href="anoncvs.html">AnonCVS</a> mirrors. + +<a name="mbas"> +** Mono Basic (Mono's VB.NET compiler) + + Work has resumed on the Mono Visual Basic compiler (currently + called mbas). It is part of the standard Mono distribution, + but its still an early compiler. + +<a name="Oberon"> +** Oberon + + This Oberon compiler is written in Oberon.NET (another self + hosting compiler). + + The main site <a href="http://www.oberon.ethz.ch/oberon.net/">http://www.oberon.ethz.ch/oberon.net/</a> + + Download: + <a href="http://www.oberon.ethz.ch/oberon.net/download/">http://www.oberon.ethz.ch/oberon.net/download/</a> + + Examples: + <a href="http://www.oberon.ethz.ch/oberon.net/examples/">http://www.oberon.ethz.ch/oberon.net/examples/</a> + + + <a href="http://www.superin.formativ.net/mono/oberon/oberon.zip">http://www.superin.formativ.net/mono/oberon/oberon.zip</a> + +<a name="ComponentPascal"> +** Component Pascal + + The Component Pascal compiler: <a + href="http://www2.fit.qut.edu.au/CompSci/PLAS/ComponentPascal">Home + Page</a>, you can <a + href="http://www2.fit.qut.edu.au/CompSci/PLAS/ComponentPascal/gpcp1.1.4-netRTM.zip"> + download it</a> + +<a name="Forth"> +** Delta Forth + + The Delta Forth.NET project: <a + href="www.dataman.ro/dforth">Home + Page</a> and <a href="http://www.dataman.ro/dforth/index.html">more + details here</a>. + + +<a name="Tachy"> +** Tachy + + A subset of Scheme language called <a + href="http://radio.weblogs.com/0101156/stories/2002/03/19/tachy.html">Tachy</a> + +* Missing languages + + Here is a list of a few languages that we would like to see + supported. We will try to maintain a set of links here with + technical information for those interested in porting, + implementing or adapting a compiler for any of these + languages: + +<a name="JavaScript"> +* Java Script + + The Mozilla project has an implementation of JavaScript + written in Java called <a + href="http://www.mozilla.org/rhino/">Rhino</a>. + + You could port this code from Java to C#. + + Note that since JavaScript allows for evaluation at runtime, + the compiler has to be built as a class that can be invoked at + runtime. + +<a name="c"> +* C + + Ideally GCC could be modified to generate CIL, but it is a + big task. That would give us various compilers in one pass. + + <a href="http://www.cs.princeton.edu/software/lcc">LCC</a> 4.2 + has been recently released. This release adds support for compiling + ANSI C programs to CIL. Note that the CIL support only works on Win32 + right now, but should be easy to convert to Mono/other architectures. + + LCC is not an open source compiler, but it is free as long as you + do not profit from selling it. + +<a name="Java"> +* Java + + We have a <a href="java.html">separate page</a> for Java. + + diff --git a/web/mailing-lists b/web/mailing-lists new file mode 100644 index 00000000000..366e6c42cc6 --- /dev/null +++ b/web/mailing-lists @@ -0,0 +1,211 @@ +* Mailing Lists + + Most of the mailing lists are in english, but there is also + Mono Hispano that has lists in Spanish. <a + href="http://mono.es.gnome.org/mailman/listinfo/mono-hispano">Mono Hispano list</a> + + There are a number of mailing lists for Mono in English: + + <table> + <tr> + <td> + <b><a + href="http://lists.ximian.com/mailman/listinfo/mono-list">mono-list</a></b> + </td> + <td> + The general Mono discussion list. + </td> + </tr> + <tr> + <td> + <b><a + href="http://lists.ximian.com/mailman/listinfo/mono-announce-list">mono-announce-list</a></b> + </td> + <td> + Announcements of Mono developments. + </td> + </tr> + <tr> + <td> + <b><a + href="http://lists.ximian.com/mailman/listinfo/mono-gc-list">mono-gc-list</a></b> + </td> + <td> + Discussion on the GC system of Mono. + </td> + </tr> + <tr> + <td> + <b><a + href="http://lists.ximian.com/mailman/listinfo/mono-patches">mono-patches</a></b> + </td> + <td> + Track the CVS activity of Mono on this mailing list (patches are sent to recipients). + You can get <a href="http://www.go-mono.com/snapshots">daily snapshots</a> as well. + </td> + </tr> + <tr> + <td> + <b><a + href="http://lists.ximian.com/mailman/listinfo/mono-cvs-list">mono-cvs-list</a></b> + </td> + <td> + Track the CVS activity of Mono on this mailing list. + </td> + </tr> + <tr> + <td> + <b><a + href="http://lists.ximian.com/mailman/listinfo/mono-docs-list">mono-docs-list</a></b> + </td> + <td> + Discussion on the documentation of Mono. + </td> + </tr> + <tr> + <td> + <b><a href="http://lists.ximian.com/mailman/listinfo/mono-bugs">mono-bugs</a></b> + </td> + <td> + This mailing list is used to keep track of the bugs in Mono as reported + in <a href="http://bugzilla.ximian.com">Bugzilla.ximian.com</a> + </td> + </tr> + <tr> + <td> + <b><a + href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mono-winforms-list</a></b> + </td> + <td> + Used to discuss the Windows.Forms implementatation for Mono using Wine. + </td> + </tr> + </table> + + Other mailing lists of interest: + + <ul> + * <b><a + href="http://discuss.develop.com/dotnet.html">Dotnet mailing + list at Develop.com:</a></b> The guys at Develop Mentor run + this general purpose mailing list. + </ul> + </ul> + +* Google search of the archives + +<!-- Google Search with mods --> +<center> + +<table> +<tr> +<td><a href="http://www.google.com/search"><img src="mailing-lists_files/Logo_40wht.gif" border="0" alt="Google" align="middle"></a></td> + +<td> +<table> + +<tr><td> +<FORM method=GET action=http://www.google.com/custom> +<TABLE bgcolor=#FFFFFF cellspacing=0 border=0> +<tr valign=top> +<td> +<INPUT TYPE=text name=q size=31 maxlength=255 value=""> +<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono"> +<INPUT type=submit name=sa VALUE="Search"> +<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;"> +<font face="arial,sans-serif" size="-1"><input type="hidden" name="domains" value="www.go-mono.com;lists.ximian.com"><br><input type="radio" name="sitesearch" value="www.go-mono.com"> Search www.go-mono.com <input type="radio" name="sitesearch" value="lists.ximian.com"> Search lists.ximian.com </font><br> +</td></tr></TABLE> +</FORM> +</tr></td> + +<tr><td> +<FORM method=GET action=http://www.google.com/custom> +<TABLE bgcolor=#FFFFFF cellspacing=0 border=0> +<tr valign=top> +<td> +<INPUT TYPE=text name=q size=31 maxlength=255 value=""> +<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-list"> +<INPUT type=submit name=sa VALUE="Search"> +<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;"> +<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>list</b> </font><br> +</td></tr></TABLE> +</FORM> +</tr></td> + +<tr><td> +<FORM method=GET action=http://www.google.com/custom> +<TABLE bgcolor=#FFFFFF cellspacing=0 border=0> +<tr valign=top> +<td> +<INPUT TYPE=text name=q size=31 maxlength=255 value=""> +<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-announce-list"> +<INPUT type=submit name=sa VALUE="Search"> +<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;"> +<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>announce-list</b> </font><br> +</td></tr></TABLE> +</FORM> +</tr></td> + +<tr><td> +<FORM method=GET action=http://www.google.com/custom> +<TABLE bgcolor=#FFFFFF cellspacing=0 border=0> +<tr valign=top> +<td> +<INPUT TYPE=text name=q size=31 maxlength=255 value=""> +<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-bugs"> +<INPUT type=submit name=sa VALUE="Search"> +<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;"> +<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>bugs</b> </font><br> +</td></tr></TABLE> +</FORM> +</tr></td> + +<tr><td> +<FORM method=GET action=http://www.google.com/custom> +<TABLE bgcolor=#FFFFFF cellspacing=0 border=0> +<tr valign=top> +<td> +<INPUT TYPE=text name=q size=31 maxlength=255 value=""> +<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-gc-list"> +<INPUT type=submit name=sa VALUE="Search"> +<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;"> +<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>gc-list</b> </font><br> +</td></tr></TABLE> +</FORM> +</tr></td> + +<tr><td> +<FORM method=GET action=http://www.google.com/custom> +<TABLE bgcolor=#FFFFFF cellspacing=0 border=0> +<tr valign=top> +<td> +<INPUT TYPE=text name=q size=31 maxlength=255 value=""> +<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-cvs-list"> +<INPUT type=submit name=sa VALUE="Search"> +<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;"> +<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>cvs-list</b> </font><br> +</td></tr></TABLE> +</FORM> +</tr></td> + +<tr><td> +<FORM method=GET action=http://www.google.com/custom> +<TABLE bgcolor=#FFFFFF cellspacing=0 border=0> +<tr valign=top> +<td> +<INPUT TYPE=text name=q size=31 maxlength=255 value=""> +<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-patches"> +<INPUT type=submit name=sa VALUE="Search"> +<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;"> +<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>patches</b> </font><br> +</td></tr></TABLE> +</FORM> +</tr></td> + + +</table> +</tr> +</table> + +</center> +<!-- /Google Search with mods --> diff --git a/web/mbas b/web/mbas new file mode 100644 index 00000000000..49247b5c527 --- /dev/null +++ b/web/mbas @@ -0,0 +1,54 @@ +* mbas: Mono's Basic.NET Compiler.
+
+ MBAS is a CIL compiler for the Visual Basic language, an extended
+ version of VisualBasic.NET. It's based on the MCS compiler
+ and still in heavy development, though many language features are
+ already supported.
+
+** What works
+
+ <ul>
+
+ * Classes, Fields and Methods. Properties are still
+ being worked on.
+
+ * Module definition and Sub functionality (TODO: Function's)
+
+ * Namespace Import, so can you reference, instantiate
+ and call external assemblies
+
+ * Parameter passing between Sub's. ByVal and ByRef
+ parameters are being worked on.
+
+ * Delegates
+
+ * Object creation
+
+ * Events - to a limited extent. You can declare a
+ Class-Field as 'WithEvents' and dynamic events (i.e
+ AddHandler MyButton.Click, Button1_OnClick). Please
+ beware: just after committing the code, I discovered
+ that the handler field in the AddHandler call is
+ case-sensitive, a remnant of mBas' mcs heritage)
+
+ * Statements supported are 'If..Then..Else' ,
+ 'While..End While' and assignment statements. Simple
+ operators (+, -, *, /, >, <, =) should also
+ work. Other statements (For..Next, etc.) should be
+ quite trivial to implement.
+ </ul>
+
+ A lot of this stuff is implemented rebuilding proper expressions and
+ statements on top of the classes provided by mcs (look at the grammar -
+ mb-parser.jay - and compare it with cs-parser.jay, if interested).
+
+** TODO-list
+
+ At this stage almost every element of the language must be still checked for
+ conformance to MS'implementation. Help is particularly needed for those areas
+ I know little of (mcs internals are still quite obscure to me). I'd like to
+ implement class properties, the missing statements, exception handling,
+ structures and actual event support (not necessarily in this order). Once we
+ have all this stuff set up and reasonably bug-free, more work could be done
+ on helper functions and Object-vars handling.
+
diff --git a/web/mono-beginning b/web/mono-beginning new file mode 100644 index 00000000000..970eed63f6e --- /dev/null +++ b/web/mono-beginning @@ -0,0 +1,34 @@ +* Mono for beginners + + Hinne Hettema and Jaime Anguiano Olarra are providing us with + nice and complete set of documents (HOWTOs) about how to install, + configure, run and test the software developed by the Mono Project. + + You can read them online, get PDF versions or get the XML sources. + + + HTML Format (read it online) + + For <a href="mono-beginning/t1.html">RPM Linux based systems</a> + + For <a href="http://monoevo.sourceforge.net/mono-windows/mono-beginning-windows/t1.html">Microsoft Windows</a> + + + PDF Format + + For <a href="mono-beginning.pdf">RPM Linux based systems</a> + + + XML Source + + For <a href="mono-beginning.xml">RPM Linux based systems</a> + + For <a href="http://monoevo.sourceforge.net/mono-windows/mono-beginning-windows.xml">Microsoft Windows</a> + + + Currently Hinne is working on a Mono Tools HOWTO. Which will be + very useful for the hackers that would like to get in touch with + Mono and Jaime is working out a Mono Beginning HOWTO for Debian + users. + + diff --git a/web/mono-beginning-windows.xml b/web/mono-beginning-windows.xml new file mode 100644 index 00000000000..a6f34da77f0 --- /dev/null +++ b/web/mono-beginning-windows.xml @@ -0,0 +1,1065 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" []>
+<article>
+
+ <articleinfo>
+
+ <!-- Use "HOWTO", "mini HOWTO", "FAQ" in title, if appropriate -->
+ <title>Mono Beginners HOWTO for Windows users</title>
+
+ <author>
+ <firstname>Jaime</firstname>
+ <surname>Anguiano Olarra</surname>
+ <affiliation>
+ <address><email>jaime@geneura.ugr.es</email></address>
+ </affiliation>
+ </author>
+
+ <author>
+ <firstname>Hinne</firstname>
+ <surname>Hettema</surname>
+ <affiliation>
+ <address><email>h.hettema@auckland.ac.nz</email></address>
+ </affiliation>
+ </author>
+
+ <pubdate>2002-08</pubdate>
+
+ <!-- Most recent revision goes at the top; list in descending order -->
+ <!-- All dates specified in ISO "YYYY-MM-DD" format -->
+ <revhistory>
+ <revision>
+ <revnumber>0.1</revnumber>
+ <date>2002-08-05</date>
+ <authorinitials>JA</authorinitials>
+ <revremark>First release</revremark>
+ </revision>
+ </revhistory>
+
+ <!-- Provide a good abstract; a couple of sentences is sufficient -->
+ <abstract>
+ <para>
+ The goal of this document is to guide people through the setup of a Mono
+ framework in a Windows box. Because some people might want to just test
+ Mono a bit and use the compiler, etc, I have made two distinctions, one
+ for the Mono user that only wants to get precompiled binaries and another
+ for the one how wants to build Mono from the CVS and probably contribute
+ to the project actively. Each kind of user has to read the corresponding
+ part of this document. I hope a lot of Windows users will get a nice
+ approach to the free software world by starting using Mono.
+ </para>
+ </abstract>
+
+ </articleinfo>
+
+<sect1 id="intro">
+<title>Introduction</title>
+
+<para>
+Mono is an open source implementation of the Common Language Infrastructure
+(CLI) specified in ECMA standard 335. It comes with a C# compiler and
+provides an extensible platform to develop and run applications that
+are interoperable with Microsoft .NET.
+</para>
+
+<para>
+Mono is not finished--it is a project still under development. As a
+result, installation and configuration may not be as smooth as you
+will be used to from other Linux or Windows applications. Nevertheless,
+mono is in a state that will allow you to get it up and running and gain
+experience with it--which is, I would suggest, a very smart thing to do.
+</para>
+
+<para>
+This document is aimed at the mono beginner, and aims to present a complete
+view of a minimal installation, which will allow you to experiment with
+mono to some degree. It also describes some of those experiments. We
+expect that after reading this document you'll go on to do either of
+two things:
+</para>
+<orderedlist>
+<listitem>
+<para>
+Continue to contribute to the mono project in some shape or form. The
+website has some ideas and suggestions under the heading 'Contributing'.
+</para>
+</listitem>
+<listitem>
+<para>
+Continue to write applications that run in mono.
+</para>
+</listitem>
+</orderedlist>
+
+<para>
+We hope this document will be useful to you in your first steps with mono.
+Happy hacking!
+</para>
+
+<sect2 id="disclaimer"> <title>Disclaimer</title>
+
+<para>
+No liability for the contents of this document can be accepted.
+Use the concepts, examples and information at your own risk. There may
+be errors and inaccuracies, that could be damaging to your system.
+Proceed with caution, and although this is highly unlikely, the author(s)
+do not take any responsibility.
+</para>
+
+<para>
+All copyrights are held by their by their respective owners,
+unless specifically noted otherwise. Use of a term in this document
+should not be regarded as affecting the validity of any trademark or
+service mark. Naming of particular products or brands should not be
+seen as endorsements.
+</para>
+</sect2>
+
+<!-- Give credit where credit is due...very important -->
+<sect2 id="credits"> <title>Credits / Contributors</title>
+
+<para> Credits are due to </para>
+<itemizedlist>
+<listitem>
+<para>Hinne Hettema <email>h.hettema@auckland.ac.nz</email>
+for creating the xml template I used for this document, for
+reviewing and make an excellent job with the other HOWTO and
+for his feedback. As you can see a lot of his work has been
+included in this document too.
+</para>
+</listitem>
+<listitem>
+<para>
+The Mono Hackers.
+</para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<!-- Feedback -->
+<sect2 id="feedback"> <title>Feedback</title>
+
+<para>
+Feedback is most certainly welcome for this document. Send your
+additions, comments and criticisms to the following email address:
+<email>mono-docs-list@ximian.com</email>. I am lurking on this list
+and will maintain this document as required.
+</para>
+</sect2>
+</sect1>
+
+<!-- This is the preamble stuff over with the rest of document follows... -->
+<sect1 id="installation">
+<title> Installing Mono</title>
+
+<sect2 id="obtaining">
+<title>Obtaining Mono</title>
+<para>
+In order to obtain the required software you just need to visit the
+Mono download page at http://www.go-mono.org/download or any of the
+related sites.
+</para>
+
+<para>
+You'll be able to complete everything in this document if you just install
+the runtime, but taking a look at the compiler package is well worth the
+effort. The compiler is written in C# and is 'self hosting' which means it
+is able to compile itself.
+</para>
+
+<para>
+This page also lists the current versions of the software
+mono depends on. Make sure that your system has all the
+required versions, otherwise mono won't compile.
+</para>
+
+</sect2>
+
+<sect2 id="easyinstall">
+<title>Installing Mono on Windows, the easy way</title>
+<para>
+ Oh. This is a very easy task now. If you just want to take a look at
+ the possibilities of Mono get the Mono installer from the site of
+ Johannes Roith <johannes\@jroith.de>:
+</para>
+
+<para>
+ http://www.superin.informativ.net/mono/mono.htm. You can get a link in
+</para>
+<para>
+ the download section of the Mono site too: http://www.go-mono.org/download
+</para>
+<para>
+ Then you just need a Windows machine. Better use
+ Windows 2000 Professional. </para>
+<para>
+ Once you've got it, run the installer.
+</para>
+<para>
+ Remember, building your own Mono runtime and compiler from the sources
+ is strongly recommended. You won't discover the power of Mono until
+ you get it made this way. If you feel hungry about real programming with
+ Mono, proceed like in the next section.
+</para>
+</sect2>
+
+<sect2 id="hardinstall">
+<title>Building Mono under Windows</title>
+<itemizedlist>
+ <listitem>
+ <para>
+ 1.- Get Windows 2000 Professional or any Windows System supporting .NET SDK.
+ Avoid using XP and the redistributable version of the SDK (necessary for
+ WinME, etc).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 2.- Get the latest Cygwin distribution, be sure you install the GNU Build Tools
+ packages. Take the openssh package if you plan to contribute to the project.
+ If you feel insecure about the packages you need to install, install all of
+ them, of course, Text, Admin, Games and Web are not necessary at all and you
+ can pass of those. The fitness of your choice will depend of your knowledge
+ on Linux and/or Cygwin. If in doubt install all.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 3.- Install the .NET SDK.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 4.- Install Cygwin.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 5.- Get http://www.go-mono.org/mono-build-w32.sh and put it into your home
+ directory in the cygwin setup.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 6.- Enter your cygwin environment. If you have an account in the mono cvs, then
+ export the variables as shown in http://www.go-mono.org/ccvs.html
+ </para>
+
+ <programlisting>
+ This means. Enter: export CVSROOT=user@mono-cvs.ximian.com:/cvs/public
+
+ and export CVS_RSH=ssh
+ </programlisting>
+ <para>
+ If you have no account DO NOTHING.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 7.- Enter:
+ <programlisting>
+ export ACLOCAL_FLAGS="-I /usr/local/share/aclocal"
+ and this: export PKG_CONFIG_PATH="/usr/local/bin"
+ </programlisting>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 8.- Run the script (mono-build-w32.sh)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 9.- All should work fine know and you should see it download what necessary and
+ build mono.
+ </para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<sect2 id="errors">
+<title>Troubleshooting</title>
+<para>
+ If you have noticed problems during step 8 and the execution stops because of
+ errors as I cannot find that or such library or alike, try to:
+</para>
+
+<itemizedlist>
+<listitem>
+ <para>
+ 1.- Create a directory mono-temp for example.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 2.- Move and unzip all the zips the mono-build script downloads to /usr/local
+ to that new directory. Do it one by one, copying the content of the created
+ subdirectories (include, bin, etc) to their respectives in /usr/local. Take
+ care, some libraries like libglib... must go into /usr/local/bin and not
+ into /usr/local/lib.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 3.- Jump into the /usr/local/mono directory and run ./autogen.sh
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 4.- Then run ./configure and after it: make and finally: make install.
+ </para>
+ </listitem>
+</itemizedlist>
+</sect2>
+</sect1>
+
+<sect1 id="running">
+<title>Running mono</title>
+<sect2 id="basic">
+<title>Basic steps</title>
+<para>
+To work with mono, you first have to create a C# program. Open up
+your favourite editor, and type in the following code:
+</para>
+<programlisting>
+using System;
+
+class Hello
+{
+public static void Main(String[] args)
+ {
+ Console.WriteLine("mono:: is alive and well...");
+
+ for (int i = 0; i < args.Length; i++)
+ Console.WriteLine("Argument {0} = {1}", i, args[i]);
+ }
+}
+</programlisting>
+
+<para>
+Save the file as hello.cs. To compile this into a working program,
+type mcs hello.cs. If you get the following:
+</para>
+<programlisting>
+ mcs hello.cs
+RESULT: 0
+</programlisting>
+<para>
+you know the compile worked fine. If you see some strange error
+messages including the word 'parser' somewhere, you made a mistake in
+your program. Fix this up first.
+</para>
+
+<para>
+You are now ready to execute your first mono program. To execute
+the code, type
+</para>
+
+<programlisting>
+ mono hello.exe arg1 arg2 arg 3
+</programlisting>
+<para>
+(where we have given some arguments just for fun) and you'll
+see the following:
+</para>
+
+<programlisting>
+mono:: is alive and well...
+Argument 0 = arg1
+Argument 1 = arg2
+Argument 2 = arg
+Argument 3 = 3
+RESULT: 0
+</programlisting>
+<para>
+As you can see, mono printed the line "mono:: is alive and well"
+and printed the list of arguments. This completes the creation
+and execution of your first mono program.
+</para>
+</sect2>
+
+<sect2 id="interpreter">
+<title>Interpreter</title>
+<para>
+But mono will allow you to do more. First of all, mono is the
+compiled mono execution environment which uses the Just in
+Time (JIT) compiler. Mono also comes with an interpreted
+environment, which can be accessed using the command 'mint'
+as follows
+</para>
+<programlisting>
+ mint hello.exe arg1 arg 2
+mono:: is alive and well...
+Argument 0 = arg1
+Argument 1 = arg
+Argument 2 = 2
+</programlisting>
+<para>
+As you can see, it makes no difference to mono output which
+environment you use, but what happens under the hood is very
+different. If you use 'mono' as the command line tool, you
+call the 'production' execution environment which will read
+your portable executable (PE) file, and call the just in
+time (JIT) compiler to compile the PE code down to machine
+level code (in my case, an x86 architecture) after which
+it is executed.
+</para>
+<para>
+If you use mint, the JIT is not used, and the PE code is
+interpreted into x86 instructions for execution. In fact,
+for our simple 'hello' mint is slightly faster. The point
+is that the JIT compiler will take some time to compile the
+code of our program and store it in some location in memory,
+but the subsequent execution of the code is faster with mono.
+</para>
+
+<para>
+After this simple run of mono, it is time to play with some options.
+I won't cover these in detail since there are quite a few, and also because
+I assume you downloaded mono to hack it around in the first place. So
+I'll leave some pointers.
+</para>
+
+
+<sect3 id="debugging">
+<title>Debugging</title>
+<para>
+Mono supports a debugging option when you specify the "-d" flag while running
+the runtime. Utilising this flag will get you a significant amount of output,
+and it may be an idea to specify an output file as well. The interesting aspect
+of this file is that it allows you to see to some extent (quite precisely,
+actually) what the JIT compiler is up to.
+</para>
+</sect3>
+
+<sect3 id="statistics">
+<title>Statistics</title>
+<para>
+It is also possible to collect some runtime statistics on your program. These
+will give you some idea of the resource utilisation of your program.
+</para>
+<programlisting>
+ mono --stats hello.exe
+mono:: is alive and well...
+RESULT: 0
+Mono Jit statistics
+Compiled methods: 58
+Methods cache lookup: 15
+Method trampolines: 698
+Basic blocks: 188
+Max basic blocks: 15
+Allocated vars: 238
+Analyze stack repeat: 61
+Compiled CIL code size: 2450
+Native code size: 10167
+Max code size ratio: 7.13 (FileStream::FlushBuffer)
+Biggest method: 1016 (StreamWriter::Write)
+Code reallocs: 27
+Allocated code size: 22073
+Inlineable methods: 17
+Inlined methods: 22
+
+Created object count: 18
+Initialized classes: 127
+Used classes: 37
+Static data size: 288
+VTable data size: 8292
+</programlisting>
+</sect3>
+
+</sect2>
+
+<sect2 id="ILAsm_code" >
+<title>Inspecting IL Assembly code</title>
+<para>
+Mono also provides a small tool that will let you disassemble
+the executable (.exe) file so you can have a peek
+under the hood. This tool is monodis, and is run as
+follows:
+
+</para>
+<programlisting>
+ monodis hello.exe
+.assembly extern mscorlib
+{
+ .ver 0:0:0:0
+}
+.assembly 'hello'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+ .class private auto ansi beforefieldinit Hello
+ extends [mscorlib]System.Object
+ {
+
+ // method line 1
+ .method public hidebysig specialname rtspecialname
+ instance default void .ctor() cil managed
+ {
+ // Method begins at RVA 0x20ec
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void System.Object::.ctor()
+ IL_0006: ret
+ } // end of method instance default void .ctor()
+
+ // method line 2
+ .method public static
+ default void Main(string[] args) cil managed
+ {
+ // Method begins at RVA 0x20f4
+ .entrypoint
+ // Code size 56 (0x38)
+ .maxstack 5
+ .locals init (
+ int32 V_0,
+ int32 V_1)
+ IL_0000: ldstr "mono:: is alive and well..."
+ IL_0005: call void System.Console::WriteLine(string)
+ IL_000a: ldc.i4.0
+ IL_000b: stloc.0
+ IL_000c: ldloc.0
+ IL_000d: ldarg.s 0
+ IL_000f: ldlen
+ IL_0010: clt
+ IL_0012: brfalse IL_0037
+
+ IL_0017: ldstr "Argument {0} = {1}"
+ IL_001c: ldloc.0
+ IL_001d: box [mscorlib]System.Int32
+ IL_0022: ldarg.s 0
+ IL_0024: ldloc.0
+ IL_0025: ldelem.ref
+ IL_0026: call void System.Console::WriteLine(string, object, object)
+ IL_002b: nop
+ IL_002c: ldloc.0
+ IL_002d: ldc.i4.1
+ IL_002e: add
+ IL_002f: stloc.1
+ IL_0030: ldloc.1
+ IL_0031: stloc.0
+ IL_0032: br IL_000c
+
+ IL_0037: ret
+ } // end of method default void Main(string[] args)
+
+ } // end of type Hello
+
+
+</programlisting>
+<para>
+This is the listing of the code of your program in a language
+called IL assembly, or Common Intermediate Language (CIL). The
+CIL provides the portability of the mono platform, and ensures
+that code compiled with Microsoft's .NET framework will work
+on mono and vice versa.
+</para>
+</sect2>
+
+<sect2 id="man_pages">
+<title>Man pages</title>
+
+<para>
+Mono has man pages already installed, and generally, typing <command>
+man</command> before the command you wish to execute should help in
+getting a list of the options. In many cases, it's still up to you
+to figure out what they do.
+</para>
+
+</sect2>
+
+
+</sect1>
+
+
+<sect1 id="problems">
+<title>Problems</title>
+<para>
+With mono being as new as it is, it is likely that you will have some
+problems with installation. The following are some ideas to help you
+out in a bind:
+</para>
+
+<orderedlist>
+<listitem>
+<para>
+See the Ximian Bugzilla page to find out if there is a bug
+report about your specific issue.
+</para>
+</listitem>
+
+<listitem>
+<para>Read this document. If it does not solve your problem, we want to
+know about it. Please send a message to the email address listed for
+feedback at the beginning of the document.</para>
+</listitem>
+
+<listitem>
+
+<para>
+Visit the mono mailing lists' archives and do a little
+research in there for threads talking about the problem you have.
+</para>
+</listitem>
+
+<listitem>
+<para>
+If you still cannot correct the problem, send a message to the
+mono list. When you do this, please be as precise as possible--i.e.
+mention the system you are running, the version of mono that you have the
+problem with, and give any error codes and other output that might appear.
+</para>
+</listitem>
+</orderedlist>
+
+</sect1>
+
+
+<!-- Legal Sections --> <sect1 id="copyright">
+ <title>Copyright and License</title>
+
+ <!-- The LDP recommends, but doesn't require, the GFDL --> <para>
+ This document, <emphasis>Running mono</emphasis>, is copyrighted
+ (c) 2002 by <emphasis>Hinne Hettema</emphasis> and
+ <emphasis>Jaime Anguiano Olarra</emphasis>. Permission is
+ granted to copy, distribute and/or modify this document under the
+ terms of the GNU Free Documentation License, Version 1.1 or any later
+ version published by the Free Software Foundation; with no Invariant
+ Sections, with no Front-Cover Texts, and with no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU Free
+ Documentation License".
+ </para>
+
+<sect2 id="gfdl"> <title>GNU Free Documentation License</title>
+<!-- GNU Project - Free Software Foundation (FSF) -->
+
+<para>Version 1.1, March 2000</para>
+
+<blockquote> <para>Copyright (C) 2000 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is
+permitted to copy and distribute verbatim copies of this license document,
+but changing it is not allowed.</para> </blockquote>
+
+<sect3 id="gfdl-0"> <title>PREAMBLE</title>
+
+<para>The purpose of this License is to make a manual, textbook,
+ or other written document "free" in the sense of freedom: to assure
+ everyone the effective freedom to copy and redistribute it, with
+ or without modifying it, either commercially or noncommercially.
+ Secondarily, this License preserves for the author and publisher
+ a way to get credit for their work, while not being considered
+ responsible for modifications made by others.</para>
+
+<para>This License is a kind of "copyleft", which means that
+ derivative works of the document must themselves be free in the
+ same sense. It complements the GNU General Public License, which
+ is a copyleft license designed for free software.</para>
+
+<para>We have designed this License in order to use it for manuals
+ for free software, because free software needs free documentation:
+ a free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to software
+ manuals; it can be used for any textual work, regardless of subject
+ matter or whether it is published as a printed book. We recommend
+ this License principally for works whose purpose is instruction
+ or reference.</para>
+</sect3>
+
+<sect3 id="gfdl-1"> <title>APPLICABILITY AND DEFINITIONS</title>
+
+<para>This License applies to any manual or other work that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License. The "Document", below,
+ refers to any such manual or work. Any member of the public is a
+ licensee, and is addressed as "you".</para>
+
+<para>A "Modified Version" of the Document means any work
+ containing the Document or a portion of it, either copied verbatim,
+ or with modifications and/or translated into another language.</para>
+
+<para>A "Secondary Section" is a named appendix or a front-matter
+ section of the Document that deals exclusively with the relationship
+ of the publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could fall
+ directly within that overall subject. (For example, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.</para>
+
+<para>The "Invariant Sections" are certain Secondary Sections
+ whose titles are designated, as being those of Invariant Sections,
+ in the notice that says that the Document is released under this
+ License.</para>
+
+<para>The "Cover Texts" are certain short passages of text that
+ are listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License.</para>
+
+<para>A "Transparent" copy of the Document means a
+ machine-readable copy, represented in a format whose specification
+ is available to the general public, whose contents can be viewed and
+ edited directly and straightforwardly with generic text editors
+ or (for images composed of pixels) generic paint programs or
+ (for drawings) some widely available drawing editor, and that is
+ suitable for input to text formatters or for automatic translation
+ to a variety of formats suitable for input to text formatters.
+ A copy made in an otherwise Transparent file format whose markup
+ has been designed to thwart or discourage subsequent modification
+ by readers is not Transparent. A copy that is not "Transparent"
+ is called "Opaque".</para>
+
+<para>Examples of suitable formats for Transparent copies include
+ plain ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML designed for human modification. Opaque formats include
+ PostScript, PDF, proprietary formats that can be read and edited
+ only by proprietary word processors, SGML or XML for which the
+ DTD and/or processing tools are not generally available, and the
+ machine-generated HTML produced by some word processors for output
+ purposes only.</para>
+
+<para>The "Title Page" means, for a printed book, the title page
+ itself, plus such following pages as are needed to hold, legibly,
+ the material this License requires to appear in the title page.
+ For works in formats which do not have any title page as such,
+ "Title Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.</para>
+</sect3>
+
+<sect3 id="gfdl-2"> <title>VERBATIM COPYING</title>
+
+<para>You may copy and distribute the Document in any medium,
+ either commercially or noncommercially, provided that this License,
+ the copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that
+ you add no other conditions whatsoever to those of this License.
+ You may not use technical measures to obstruct or control the
+ reading or further copying of the copies you make or distribute.
+ However, you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.</para>
+
+<para>You may also lend copies, under the same conditions stated
+ above, and you may publicly display copies.</para>
+</sect3>
+
+<sect3 id="gfdl-3"> <title>COPYING IN QUANTITY</title>
+
+<para>If you publish printed copies of the Document numbering more
+ than 100, and the Document's license notice requires Cover Texts, you
+ must enclose the copies in covers that carry, clearly and legibly,
+ all these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The front
+ cover must present the full title with all words of the title equally
+ prominent and visible. You may add other material on the covers
+ in addition. Copying with changes limited to the covers, as long as
+ they preserve the title of the Document and satisfy these conditions,
+ can be treated as verbatim copying in other respects.</para>
+
+<para>If the required texts for either cover are too voluminous to
+ fit legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.</para>
+
+<para>If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with each
+ Opaque copy a publicly-accessible computer-network location containing
+ a complete Transparent copy of the Document, free of added material,
+ which the general network-using public has access to download
+ anonymously at no charge using public-standard network protocols.
+ If you use the latter option, you must take reasonably prudent steps,
+ when you begin distribution of Opaque copies in quantity, to ensure
+ that this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you distribute
+ an Opaque copy (directly or through your agents or retailers) of
+ that edition to the public.</para>
+
+<para>It is requested, but not required, that you contact the
+ authors of the Document well before redistributing any large number
+ of copies, to give them a chance to provide you with an updated
+ version of the Document.</para>
+</sect3>
+
+<sect3 id="gfdl-4"> <title>MODIFICATIONS</title>
+
+<para>You may copy and distribute a Modified Version of the
+ Document under the conditions of sections 2 and 3 above, provided
+ that you release the Modified Version under precisely this License,
+ with the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version
+ to whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:</para>
+
+<orderedlist numeration="upperalpha"> <listitem><para>Use in the
+Title Page
+ (and on the covers, if any) a title distinct from that of the
+ Document, and from those of previous versions (which should, if
+ there were any, be listed in the History section of the Document).
+ You may use the same title as a previous version if the original
+ publisher of that version gives permission.</para>
+</listitem>
+
+<listitem><para>List on the Title Page,
+ as authors, one or more persons or entities responsible for
+ authorship of the modifications in the Modified Version, together
+ with at least five of the principal authors of the Document (all
+ of its principal authors, if it has less than five).</para>
+</listitem>
+
+<listitem><para>State on the Title page
+ the name of the publisher of the Modified Version, as the
+ publisher.</para>
+</listitem>
+
+<listitem><para>Preserve all the
+ copyright notices of the Document.</para>
+</listitem>
+
+<listitem><para>Add an appropriate
+ copyright notice for your modifications adjacent to the other
+ copyright notices.</para>
+</listitem>
+
+<listitem><para>Include, immediately
+ after the copyright notices, a license notice giving the public
+ permission to use the Modified Version under the terms of this
+ License, in the form shown in the Addendum below.</para>
+</listitem>
+
+<listitem><para>Preserve in that license
+ notice the full lists of Invariant Sections and required Cover
+ Texts given in the Document's license notice.</para>
+</listitem>
+
+<listitem><para>Include an unaltered
+ copy of this License.</para>
+</listitem>
+
+<listitem><para>Preserve the section
+ entitled "History", and its title, and add to it an item stating at
+ least the title, year, new authors, and publisher of the Modified
+ Version as given on the Title Page. If there is no section entitled
+ "History" in the Document, create one stating the title, year,
+ authors, and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in the
+ previous sentence.</para>
+</listitem>
+
+<listitem><para>Preserve the network
+ location, if any, given in the Document for public access to
+ a Transparent copy of the Document, and likewise the network
+ locations given in the Document for previous versions it was
+ based on. These may be placed in the "History" section. You may
+ omit a network location for a work that was published at least four
+ years before the Document itself, or if the original publisher of
+ the version it refers to gives permission.</para>
+</listitem>
+
+<listitem><para>In any section entitled
+ "Acknowledgements" or "Dedications", preserve the section's title,
+ and preserve in the section all the substance and tone of each
+ of the contributor acknowledgements and/or dedications given
+ therein.</para>
+</listitem>
+
+<listitem><para>Preserve all the
+ Invariant Sections of the Document, unaltered in their text and in
+ their titles. Section numbers or the equivalent are not considered
+ part of the section titles.</para>
+</listitem>
+
+<listitem><para>Delete any section
+ entitled "Endorsements". Such a section may not be included in
+ the Modified Version.</para>
+</listitem>
+
+<listitem><para>Do not retitle any
+ existing section as "Endorsements" or to conflict in title with
+ any Invariant Section.</para>
+</listitem> </orderedlist> <para>If the Modified Version includes new
+front-matter sections
+ or appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other section
+ titles.</para>
+
+<para>You may add a section entitled "Endorsements", provided it
+ contains nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of
+ a standard.</para>
+
+<para>You may add a passage of up to five words as a Front-Cover
+ Text, and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document already
+ includes a cover text for the same cover, previously added by you or
+ by arrangement made by the same entity you are acting on behalf of,
+ you may not add another; but you may replace the old one, on explicit
+ permission from the previous publisher that added the old one.</para>
+
+<para>The author(s) and publisher(s) of the Document do not by
+ this License give permission to use their names for publicity for
+ or to assert or imply endorsement of any Modified Version.</para>
+</sect3>
+
+<sect3 id="gfdl-5"> <title>COMBINING DOCUMENTS</title>
+
+<para>You may combine the Document with other documents released
+ under this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all of
+ the Invariant Sections of all of the original documents, unmodified,
+ and list them all as Invariant Sections of your combined work in
+ its license notice.</para>
+
+<para>The combined work need only contain one copy of this
+ License, and multiple identical Invariant Sections may be replaced
+ with a single copy. If there are multiple Invariant Sections with
+ the same name but different contents, make the title of each such
+ section unique by adding at the end of it, in parentheses, the
+ name of the original author or publisher of that section if known,
+ or else a unique number. Make the same adjustment to the section
+ titles in the list of Invariant Sections in the license notice of
+ the combined work.</para>
+
+<para>In the combination, you must combine any sections entitled
+ "History" in the various original documents, forming one section
+ entitled "History"; likewise combine any sections entitled
+ "Acknowledgements", and any sections entitled "Dedications".
+ You must delete all sections entitled "Endorsements."</para>
+</sect3>
+
+<sect3 id="gfdl-6"> <title>COLLECTIONS OF DOCUMENTS</title>
+
+<para>You may make a collection consisting of the Document and
+ other documents released under this License, and replace the
+ individual copies of this License in the various documents with a
+ single copy that is included in the collection, provided that you
+ follow the rules of this License for verbatim copying of each of
+ the documents in all other respects.</para>
+
+<para>You may extract a single document from such a collection,
+ and distribute it individually under this License, provided you
+ insert a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.</para>
+</sect3>
+
+<sect3 id="gfdl-7"> <title>AGGREGATION WITH INDEPENDENT WORKS</title>
+<para>A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume
+ of a storage or distribution medium, does not as a whole count
+ as a Modified Version of the Document, provided no compilation
+ copyright is claimed for the compilation. Such a compilation is
+ called an "aggregate", and this License does not apply to the other
+ self-contained works thus compiled with the Document, on account
+ of their being thus compiled, if they are not themselves derivative
+ works of the Document.</para>
+
+<para>If the Cover Text requirement of section 3 is applicable to
+ these copies of the Document, then if the Document is less than
+ one quarter of the entire aggregate, the Document's Cover Texts
+ may be placed on covers that surround only the Document within
+ the aggregate. Otherwise they must appear on covers around the
+ whole aggregate.</para>
+</sect3>
+
+<sect3 id="gfdl-8"> <title>TRANSLATION</title>
+
+<para>Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section 4.
+ Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include
+ a translation of this License provided that you also include the
+ original English version of this License. In case of a disagreement
+ between the translation and the original English version of this
+ License, the original English version will prevail.</para>
+</sect3>
+
+<sect3 id="gfdl-9"> <title>TERMINATION</title> <para>You may not copy,
+modify, sublicense, or distribute the
+ Document except as expressly provided for under this License.
+ Any other attempt to copy, modify, sublicense or distribute the
+ Document is void, and will automatically terminate your rights under
+ this License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.</para>
+</sect3>
+
+<sect3 id="gfdl-10"> <title>FUTURE REVISIONS OF THIS LICENSE</title>
+
+<para>The Free Software Foundation may publish new, revised
+ versions of the GNU Free Documentation License from
+ time to time. Such new versions will be similar
+ in spirit to the present version, but may differ in
+ detail to address new problems or concerns. See <ulink
+ url="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</ulink>.</para>
+
+<para>Each version of the License is given a distinguishing
+ version number. If the Document specifies that a particular
+ numbered version of this License "or any later version" applies
+ to it, you have the option of following the terms and conditions
+ either of that specified version or of any later version that has
+ been published (not as a draft) by the Free Software Foundation.
+ If the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation.</para>
+</sect3>
+
+<sect3 id="gfdl-11"> <title>How to use this License for your
+documents</title>
+
+<para>To use this License in a document you have written, include
+ a copy of the License in the document and put the following copyright
+ and license notices just after the title page:</para>
+
+<blockquote><para> Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with the Invariant Sections being LIST THEIR TITLES,
+ with the Front-Cover Texts being LIST, and with the Back-Cover
+ Texts being LIST. A copy of the license is included in the section
+ entitled "GNU Free Documentation License".
+</para></blockquote>
+
+<para>If you have no Invariant Sections, write "with no Invariant
+ Sections" instead of saying which ones are invariant. If you
+ have no Front-Cover Texts, write "no Front-Cover Texts" instead of
+ "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.</para>
+
+<para>If your document contains nontrivial examples of program
+ code, we recommend releasing these examples in parallel under your
+ choice of free software license, such as the GNU General Public
+ License, to permit their use in free software.</para>
+</sect3> </sect2> </sect1>
+
+</article>
+
+
+
+
+<!-- This document is dedicated to all my friends and to the Mono hackers.
+
+ License
+
+Here goes the GFDL, GNU Free Documentation License. -->
+
diff --git a/web/mono-beginning.xml b/web/mono-beginning.xml new file mode 100644 index 00000000000..6ab1019c225 --- /dev/null +++ b/web/mono-beginning.xml @@ -0,0 +1,1294 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" []> +<article> + + <articleinfo> + + <!-- Use "HOWTO", "mini HOWTO", "FAQ" in title, if appropriate --> + <title>Running Mono</title> + + + <author> + <firstname>Hinne</firstname> + <surname>Hettema</surname> + <affiliation> + <address><email>h.hettema@auckland.ac.nz</email></address> + </affiliation> + </author> + <author> + <firstname>Jaime</firstname> + <surname>Anguiano Olarra</surname> + <affiliation> + <address><email>jaime@genuara.ugr.es</email></address> + </affiliation> + </author> + + <pubdate>2002-06</pubdate> + + <!-- Most recent revision goes at the top; list in descending order --> + <!-- All dates specified in ISO "YYYY-MM-DD" format --> + <revhistory> + <revision> + <revnumber>0.1</revnumber> + <date>2002-06-20</date> + <authorinitials>HH</authorinitials> + <revremark>First release</revremark> + </revision> + </revhistory> + + <!-- Provide a good abstract; a couple of sentences is sufficient --> + <abstract> + <para> + This document describes how to install mono on your Linux system + from the source and describes some simple experiments you can + perform with this installation. + </para> + </abstract> + + </articleinfo> + + +<sect1 id="intro"> +<title>Introduction</title> + +<para> +Mono is an open source implementation of the Common Language Infrastructure +(CLI) specified in ECMA standard 335. It comes with a C# compiler and +provides an extensible platform to develop and run applications that +are interoperable with Microsoft .NET. +</para> + +<para> +Mono is not finished--it is a project still under development. As a +result, installation and configuration may not be as smooth as you +will be used to from other Linux applications. Nevertheless, mono is +in a state that will allow you to get it up and running and gain +experience with it--which is, I would suggest, a very smart thing to do. +</para> + +<para> +This document is limited in the following sense: it describes how to +download a 'stable' version of mono as a 'tarball' and get it to run on +your computer. I'm also assuming you run mono on Linux rather than +on Windows. All the examples have been tested on a 'vanilla' Red Hat 7.3 +installation. +</para> + +<para> +There are two items this document will <emphasis>not +</emphasis> cover: the first is how to self host the mcs compiler +under linux and the second is the graphical user environment +which is implemented as GTK#. These two interesting topics +are the subject of two more howto's that I'm planning. +</para> + +<para> +This document is also less useful for two types of people. +</para> +<itemizedlist> +<listitem> +<para> +If you are a very inexperienced linux user and want to know what mono is +all about, there is an easier way to install mono. Go to mono.baselabs.org +and download the rpm's ready for installation on your system. This site also +runs a tutorial that is worth reading. +</para> +</listitem> +<listitem> +<para> +If you are a very experienced user wanting to contribute to the mono code, +you should probably regularly do a CVS download. At the moment, the mono +code grows very fast, and the 'stable' releases still appear too slowly. +</para> +</listitem> + +</itemizedlist> + +<para> +This document is aimed at the mono beginner, and aims to present a complete +view of a minimal installation, which will allow you to experiment with +mono to some degree. It also describes some of those experiments. We +expect that after reading this document you'll go on to do either of +two things: +</para> +<orderedlist> +<listitem> +<para> +Continue to contribute to the mono project in some shape or form. The +website has some ideas and suggestions under the heading 'Contributing'. +</para> +</listitem> +<listitem> +<para> +Continue to write applications that run in mono. +</para> +</listitem> +</orderedlist> + +<para> +We hope this document will be useful to you in your first steps with mono. +Happy hacking! +</para> + +<sect2 id="note"> +<title>A note on the development of this document</title> +<para> +This document is expected to grow into a full 'running mono howto' over time. +As of yet, it does not really discuss some of the excellent efforts of others +to package mono into an rpm or deb and prepare it for easy installation. +It is our aim to include this in future versions of this document. +</para> +</sect2> + +<sect2 id="prerequisites"> +<title>Prerequisites</title> +<para> +This document assumes you are somewhat familiar with the architecture +of the Common Language Infrastructure and the C# programming language. +</para> + +<para> +To compile mono on your system, you will also have to satisfy +some dependencies on other software. A list of these are given +on the mono download page. Read through this list to see if +you've got all components. +</para> + +<para> +On a practical note, I had no dependency issues with the +installation of mono 0.12 on a 'standard issue' Red Hat 7.3 build. +</para> + +</sect2> + +<sect2 id="disclaimer"> <title>Disclaimer</title> + +<para> +No liability for the contents of this document can be accepted. +Use the concepts, examples and information at your own risk. There may +be errors and inaccuracies, that could be damaging to your system. +Proceed with caution, and although this is highly unlikely, the author(s) +do not take any responsibility. +</para> + +<para> +All copyrights are held by their by their respective owners, +unless specifically noted otherwise. Use of a term in this document +should not be regarded as affecting the validity of any trademark or +service mark. Naming of particular products or brands should not be +seen as endorsements. +</para> +</sect2> + +<!-- Give credit where credit is due...very important --> <sect2 +id="credits"> <title>Credits / Contributors</title> + +<para> This document was originally created by Jaime Anguiano Olarra, +but has been extensively rewritten. Credits are due to </para> +<itemizedlist> +<listitem> +<para>Jaime Anguiano Olarra <email>jaime@geneura.ugr.es</email> +for creating the original version of this document, and in fact +the document that got me through installing mono for the first time. +</para> +</listitem> +<listitem> +<para> +My partner Margaret for support on my more exotic ventures. +</para> +</listitem> +</itemizedlist> +</sect2> + +<!-- Feedback --> +<sect2 id="feedback"> <title>Feedback</title> + +<para> +Feedback is most certainly welcome for this document. Send your +additions, comments and criticisms to the following email address: +<email>mono-docs-list@ximian.com</email>. I am lurking on this list +and will maintain this document as required. +</para> +</sect2> +</sect1> + +<!-- This is the preamble stuff over with the rest of document +follows... --> +<sect1 id="installation"> +<title> Installing Mono</title> + +<sect2 id="obtaining"> +<title>Obtaining Mono</title> +<para> +There are several ways to get Mono running on your computer. This +document will discuss only one of those: downloading the source tarball +and utilising the make utilities to get mono up and running. There is +only one mono package to worry about if you are just after a 'base' install +of mono: the mono runtime. This package, found under the name "mono-x.xx" +has got a compiled version of the compiler built in. +</para> + +<para> +You'll be able to complete everything in this document if you just install +the runtime, but taking a look at the compiler package is well worth the +effort. The compiler is written in C# and is 'self hosting' which means it +is able to compile itself. +</para> + +<para> +As of this moment, it is my understanding that there are still some issues +with the 'self hosting' bit of the compiler on linux, although this is +expected to work in later versions of mono. If you are just interested in +finding out how mono will work under linux, I would not worry about the +self-hosting bit for now. The self-hosting of the compiler will be the +topic of a future howto. +</para> + +<para> +See <ulink url="http://www.go-mono.com/download">the mono download +site</ulink> for the source of the tarballs. +</para> + +<para> +This page also lists the current versions of the software +mono depends on. Make sure that your system has all the +required versions, otherwise mono won't compile. +</para> + +<para> +At a minimum for mono 0.12, you'll need to: +</para> + +<itemizedlist> +<listitem> +<para> +download and install +<ulink url="http//www.freedesktop.org/software/pkgconfig"> +pkg-config</ulink>. +</para> +</listitem> +<listitem> +<para> +download and install +<ulink url="ftp://ftp.gtk.org/pub/gtk/v1.3/glib-1.3.12.tar.gz"> +glib 1.3</ulink>. +</para> +</listitem> +</itemizedlist> + +<para> +Installing the tarballs is done via GNU autoconf and +automake. The general upshot of running autoconf and automake is that you +can type <command>./configure</command> and then <command> make</command> +to do the build. +Typing <command>make install</command> completes the installation of mono +on your system. +</para> + +<para> +To build the mono runtime package, unzip the tarball to some useful +location. I tend to use <command>/usr/src</command> as the location, +but you could really do it anywhere. For the install process, it is +also a good idea to be 'root'. The installation process will shuttle +some executables into <command>/usr/local/bin</command> (more about +that later). +</para> + +<para> +Unzipping the tarballs will have created two directories in <command> +/usr/src/</command>, one called something like mono-x.xx and the other +mcs-x.xx. The one called 'mono' is the runtime environment, and this contains +all that is initially needed to run mono and investigate its inner workings. +</para> + +<para> +To start building the mono runtime, first type <command>./configure</command>. +You will see an output like this: +</para> +<programlisting> +[root@taurus mono-0.12]# ./configure +loading cache ./config.cache +checking host system type... i686-pc-linux-gnu +checking target system type... i686-pc-linux-gnu +checking build system type... i686-pc-linux-gnu +checking for a BSD compatible install... (cached) /usr/bin/install -c +checking whether build environment is sane... yes +checking whether make sets ${MAKE}... (cached) yes +checking for working aclocal... found + + +snip .... + + +checking BASE_DEPENDENCIES_CFLAGS... -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include +checking BASE_DEPENDENCIES_LIBS... -lglib-2.0 +checking for GC_malloc in -lgc... (cached) no +configure: warning: Compiling mono without GC. +checking if off_t is 64 bits wide... no +checking if _FILE_OFFSET_BITS=64 gives 64 bit off_t... ok + +snip ... + +creating Makefile +creating mono/Makefile +creating mono/utils/Makefile +creating mono/metadata/Makefile +creating mono/dis/Makefile +creating mono/cil/Makefile +creating mono/arch/Makefile +creating mono/os/Makefile +creating mono/os/win32/Makefile +creating mono/os/unix/Makefile +creating mono/arch/x86/Makefile +creating mono/arch/ppc/Makefile +creating mono/arch/sparc/Makefile +creating mono/arch/arm/Makefile +creating mono/interpreter/Makefile +creating mono/tests/Makefile +creating mono/benchmark/Makefile +creating mono/monoburg/Makefile +creating mono/monograph/Makefile +creating mono/jit/Makefile +creating mono/io-layer/Makefile +creating mono/handles/Makefile +creating runtime/Makefile +creating scripts/Makefile +creating man/Makefile +creating doc/Makefile +creating docs/Makefile +creating config.h +config.h is unchanged + + + GC: auto + + +[root@taurus mono-0.12]# +</programlisting> + + +<para> +This means that the configure script has now created all the +makefiles necessary to complete the build on your system. +Note the "GC: auto" at the end of the list of commands. +GC stands for "garbage collection" and it +will be addressed in a later section of this document. +</para> +<para> +You are now ready to start the mono "build" process. To kick +this off, you can type <command>make</command> at the +command prompt. You'll see something like this: +</para> + +<programlisting> +[root@taurus mono-0.12]# make +make all-recursive +make[1]: Entering directory `/usr/src/mono-0.12' +Making all in mono +make[2]: Entering directory `/usr/src/mono-0.12/mono' +Making all in utils +make[3]: Entering directory `/usr/src/mono-0.12/mono/utils' +gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I/usr/include/glib-2.0 +-I/usr/lib/glib-2.0/include -I/usr/include/glib-2.0 +-I/usr/lib/glib-2.0/include -I../.. -I../../mono +-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -Wall +-Wunused -Wmissing-prototypes -Wmissing-declarations +-Wstrict-prototypes -Wmissing-prototypes -Wnested-externs +-Wpointer-arith -Wno-cast-qual -Wcast-align -Wwrite-strings +-c mono-hash.c + +</programlisting> +<para> +and this will continue for a while. On my 1 GHz Duron with 256 MB of RAM the +total build process takes about three minutes. All the terrible flags after gcc +have essentially been set by the configure script and there is no need to worry +about these. +</para> +<para> +To finally install mono, you can type <command>make install</command> +to get a working version of mono. This command will copy the +scripts that run the executables to a place where the operating system +will be ale to find them. This location is <command>/usr/local/bin</command> +on my system. +</para> + +</sect2> + +<sect2 id="garbage_collection"> +<title> Garbage Collection</title> +<para> +To make the mint interpreter work with garbage collection, you first need to +install a garbage collection package on your system. Mono works with +Boehm Garbage collection, which is found at +<ulink url="http://www.hpl.hp.com/personal/Hans_Boehm/gc/"> +http://www.hpl.hp.com/personal/Hans_Boehm/gc/ +</ulink>. +</para> + +<para> +To get garbage collection to work, I downloaded the source tarball +into <command>/usr/src/</command> and typed <command>./configure</command> +followed by <command>make</command> and <command>make install</command>. +</para> + +<para> +There is one glitch to work around. The header file for the garbage collection +<command>gc.h</command> is found in the <command>/usr/src/gc6.0/include +</command> directory (at least on my system). The mono build process will break +on this location: it is looking for the header file in some other place called +<command>/usr/include/gc/</command> and won't be able to find the correct +header file. +</para> + +<para> +The solution is to build a symbolic link between these two locations as +follows +</para> + +<programlisting> +[root@taurus include]# ln -s /usr/src/gc6.0/include/ /usr/include/gc +</programlisting> + +<para> +after which you'll be able to list the directory contents as if they were +in <command>/usr/include</command> +</para> + +<programlisting> +[root@taurus include]# pwd +/usr/include +[root@taurus include]# ls /usr/include/gc +cord.h gc_backptr.h gc_inline.h javaxfc.h +ec.h gc_cpp.h gc_local_alloc.h leak_detector.h +gc gc_gcj.h gc_mark.h new_gc_alloc.h +gc_alloc.h gc.h gc_pthread_redirects.h private +gc_amiga_redirects.h gc_inl.h gc_typed.h weakpointer.h +[root@taurus include]# +</programlisting> + +<para> +To get mono to work with garbage collection, you'll have to rebuild the +environment. This is done easily by typing <command>make distclean</command> +to clean up any existing executables. +</para> + +<para> +Continue the build by typing <command>./configure</command>, and look at +the last line. It should read: +</para> + +<programlisting> + +snip... + +creating config.h + + + GC: boehm + + +[root@taurus mono-0.12]# + +</programlisting> + +<para> +The GC: boehm tells you that garbage collection has been turned on. Now to +compile the runtime, you type <command>make</command> and <command> make +install</command> as previously. +</para> + +<para> +You now have mono working with Garbage Collection. +</para> + +<para> +Although my experimentation is incomplete as of this time, I have found some +issues with running Garbage Collection continuously, and my recommendation +would be to turn it off for now. +</para> + +<para> +To turn garbage collection off again, you have to go to the <command>/usr/src +</command> directory where you extracted the tarball. Enter the <command>gc6.0 +</command> directory and type <command>make uninstall</command> to uninstall +Garbage Collection. Then in your <command>mono</command> directory, type +<command>make distclean</command> followed by <command>./configure</command>, +<command>make</command> and <command>make install</command>. +</para> + +</sect2> + +</sect1> + +<sect1 id="running"> +<title>Running mono</title> +<sect2 id="basic"> +<title>Basic steps</title> +<para> +To work with mono, you first have to create a C# program. Open up +your favourite editor, and type in the following code: +</para> +<programlisting> +using System; + +class Hello +{ +public static void Main(String[] args) + { + Console.WriteLine("mono:: is alive and well..."); + + for (int i = 0; i < args.Length; i++) + Console.WriteLine("Argument {0} = {1}", i, args[i]); + } +} +</programlisting> + +<para> +Save the file as hello.cs. To compile this into a working program, +type mcs hello.cs. If you get the following: +</para> +<programlisting> +[hinne@taurus hello]$ mcs hello.cs +RESULT: 0 +[hinne@taurus hello]$ +</programlisting> +<para> +you know the compile worked fine. If you see some strange error +messages including the word 'parser' somewhere, you made a mistake in +your program. Fix this up first. +</para> + +<para> +You are now ready to execute your first mono program. To execute +the code, type +</para> + +<programlisting> +[hinne@taurus hello]$ mono hello.exe arg1 arg2 arg 3 +</programlisting> +<para> +(where we have given some arguments just for fun) and you'll +see the following: +</para> + +<programlisting> +mono:: is alive and well... +Argument 0 = arg1 +Argument 1 = arg2 +Argument 2 = arg +Argument 3 = 3 +RESULT: 0 +</programlisting> +<para> +As you can see, mono printed the line "mono:: is alive and well" +and printed the list of arguments. This completes the creation +and execution of your first mono program. +</para> +</sect2> + +<sect2 id="interpreter"> +<title>Interpreter</title> +<para> +But mono will allow you to do more. First of all, mono is the +compiled mono execution environment which uses the Just in +Time (JIT) compiler. Mono also comes with an interpreted +environment, which can be accessed using the command 'mint' +as follows +</para> +<programlisting> +[hinne@taurus hello]$ mint hello.exe arg1 arg 2 +mono:: is alive and well... +Argument 0 = arg1 +Argument 1 = arg +Argument 2 = 2 +[hinne@taurus hello]$ +</programlisting> +<para> +As you can see, it makes no difference to mono output which +environment you use, but what happens under the hood is very +different. If you use 'mono' as the command line tool, you +call the 'production' execution environment which will read +your portable executable (PE) file, and call the just in +time (JIT) compiler to compile the PE code down to machine +level code (in my case, an x86 architecture) after which +it is executed. +</para> +<para> +If you use mint, the JIT is not used, and the PE code is +interpreted into x86 instructions for execution. In fact, +for our simple 'hello' mint is slightly faster. The point +is that the JIT compiler will take some time to compile the +code of our program and store it in some location in memory, +but the subsequent execution of the code is faster with mono. +</para> +<para> + +You can see what happens below (the thing to look for is the +'user' time: 0.1 seconds with mono and 0.06 seconds with mint): + +</para> +<programlisting> +[hinne@taurus hello]$ time mono hello.exe arg1 arg 2 +mono:: is alive and well... +Argument 0 = arg1 +Argument 1 = arg +Argument 2 = 2 +RESULT: 0 + +real 0m0.575s +user 0m0.100s +sys 0m0.010s +[hinne@taurus hello]$ time mint hello.exe arg1 arg 2 +mono:: is alive and well... +Argument 0 = arg1 +Argument 1 = arg +Argument 2 = 2 + +real 0m0.545s +user 0m0.060s +sys 0m0.000s +[hinne@taurus hello]$ +</programlisting> +<para> +After this simple run of mono, it is time to play with some options. +I won't cover these in detail since there are quite a few, and also because +I assume you downloaded mono to hack it around in the first place. So +I'll leave some pointers. +</para> + + +<sect3 id="debugging"> +<title>Debugging</title> +<para> +Mono supports a debugging option when you specify the "-d" flag while running +the runtime. Utilising this flag will get you a significant amount of output, +and it may be an idea to specify an output file as well. The interesting aspect +of this file is that it allows you to see to some extent (quite precisely, +actually) what the JIT compiler is up to. +</para> +</sect3> + +<sect3 id="statistics"> +<title>Statistics</title> +<para> +It is also possible to collect some runtime statistics on your program. These +will give you some idea of the resource utilisation of your program. +</para> +<programlisting> +[hinne@taurus hello]$ mono --stats hello.exe +mono:: is alive and well... +RESULT: 0 +Mono Jit statistics +Compiled methods: 58 +Methods cache lookup: 15 +Method trampolines: 698 +Basic blocks: 188 +Max basic blocks: 15 +Allocated vars: 238 +Analyze stack repeat: 61 +Compiled CIL code size: 2450 +Native code size: 10167 +Max code size ratio: 7.13 (FileStream::FlushBuffer) +Biggest method: 1016 (StreamWriter::Write) +Code reallocs: 27 +Allocated code size: 22073 +Inlineable methods: 17 +Inlined methods: 22 + +Created object count: 18 +Initialized classes: 127 +Used classes: 37 +Static data size: 288 +VTable data size: 8292 +</programlisting> +</sect3> + +</sect2> + +<sect2 id="ILAsm_code" > +<title>Inspecting IL Assembly code</title> +<para> +Mono also provides a small tool that will let you disassemble +the executable (.exe) file so you can have a peek +under the hood. This tool is monodis, and is run as +follows: + +</para> +<programlisting> +[hinne@taurus hello]$ monodis hello.exe +.assembly extern mscorlib +{ + .ver 0:0:0:0 +} +.assembly 'hello' +{ + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} + .class private auto ansi beforefieldinit Hello + extends [mscorlib]System.Object + { + + // method line 1 + .method public hidebysig specialname rtspecialname + instance default void .ctor() cil managed + { + // Method begins at RVA 0x20ec + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void System.Object::.ctor() + IL_0006: ret + } // end of method instance default void .ctor() + + // method line 2 + .method public static + default void Main(string[] args) cil managed + { + // Method begins at RVA 0x20f4 + .entrypoint + // Code size 56 (0x38) + .maxstack 5 + .locals init ( + int32 V_0, + int32 V_1) + IL_0000: ldstr "mono:: is alive and well..." + IL_0005: call void System.Console::WriteLine(string) + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldloc.0 + IL_000d: ldarg.s 0 + IL_000f: ldlen + IL_0010: clt + IL_0012: brfalse IL_0037 + + IL_0017: ldstr "Argument {0} = {1}" + IL_001c: ldloc.0 + IL_001d: box [mscorlib]System.Int32 + IL_0022: ldarg.s 0 + IL_0024: ldloc.0 + IL_0025: ldelem.ref + IL_0026: call void System.Console::WriteLine(string, object, object) + IL_002b: nop + IL_002c: ldloc.0 + IL_002d: ldc.i4.1 + IL_002e: add + IL_002f: stloc.1 + IL_0030: ldloc.1 + IL_0031: stloc.0 + IL_0032: br IL_000c + + IL_0037: ret + } // end of method default void Main(string[] args) + + } // end of type Hello + +[hinne@taurus hello]$ +</programlisting> +<para> +This is the listing of the code of your program in a language +called IL assembly, or Common Intermediate Language (CIL). The +CIL provides the portability of the mono platform, and ensures +that code compiled with Microsoft's .NET framework will work +on mono and vice versa. +</para> +</sect2> + +<sect2 id="man_pages"> +<title>Man pages</title> + +<para> +Mono has man pages already installed, and generally, typing <command> +man</command> before the command you wish to execute should help in +getting a list of the options. In many cases, it's still up to you +to figure out what they do. +</para> + +</sect2> + + +</sect1> + + +<sect1 id="problems"> +<title>Problems</title> +<para> +With mono being as new as it is, it is likely that you will have some +problems with installation. The following are some ideas to help you +out in a bind: +</para> + +<orderedlist> +<listitem> +<para> +See the Ximian Bugzilla page to find out if there is a bug +report about your specific issue. +</para> +</listitem> + +<listitem> +<para>Read this document. If it does not solve your problem, we want to +know about it. Please send a message to the email address listed for +feedback at the beginning of the document.</para> +</listitem> + +<listitem> + +<para> +Visit the mono mailing lists' archives and do a little +research in there for threads talking about the problem you have. +</para> +</listitem> + +<listitem> +<para> +If you still cannot correct the problem, send a message to the +mono list. When you do this, please be as precise as possible--i.e. +mention the system you are running, the version of mono that you have the +problem with, and give any error codes and other output that might appear. +</para> +</listitem> +</orderedlist> + +</sect1> + +<sect1 id="knownproblems"> +<title>Known Problems</title> + +<para> mcs fails to compile in Linux. +To the best of my knowledge, as of yet mcs cannot compile in Linux. +Try to install the already made packages from +http://mono.baselabs.org/index.php/software. </para> +</sect1> + +<!-- Legal Sections --> <sect1 id="copyright"> + <title>Copyright and License</title> + + <!-- The LDP recommends, but doesn't require, the GFDL --> <para> + This document, <emphasis>Running mono</emphasis>, is copyrighted + (c) 2002 by <emphasis>Hinne Hettema</emphasis> and + <emphasis>Jaime Anguiano Olarra</emphasis>. Permission is + granted to copy, distribute and/or modify this document under the + terms of the GNU Free Documentation License, Version 1.1 or any later + version published by the Free Software Foundation; with no Invariant + Sections, with no Front-Cover Texts, and with no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU Free + Documentation License". + </para> + +<sect2 id="gfdl"> <title>GNU Free Documentation License</title> +<!-- GNU Project - Free Software Foundation (FSF) --> + +<para>Version 1.1, March 2000</para> + +<blockquote> <para>Copyright (C) 2000 Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is +permitted to copy and distribute verbatim copies of this license document, +but changing it is not allowed.</para> </blockquote> + +<sect3 id="gfdl-0"> <title>PREAMBLE</title> + +<para>The purpose of this License is to make a manual, textbook, + or other written document "free" in the sense of freedom: to assure + everyone the effective freedom to copy and redistribute it, with + or without modifying it, either commercially or noncommercially. + Secondarily, this License preserves for the author and publisher + a way to get credit for their work, while not being considered + responsible for modifications made by others.</para> + +<para>This License is a kind of "copyleft", which means that + derivative works of the document must themselves be free in the + same sense. It complements the GNU General Public License, which + is a copyleft license designed for free software.</para> + +<para>We have designed this License in order to use it for manuals + for free software, because free software needs free documentation: + a free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to software + manuals; it can be used for any textual work, regardless of subject + matter or whether it is published as a printed book. We recommend + this License principally for works whose purpose is instruction + or reference.</para> +</sect3> + +<sect3 id="gfdl-1"> <title>APPLICABILITY AND DEFINITIONS</title> + +<para>This License applies to any manual or other work that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. The "Document", below, + refers to any such manual or work. Any member of the public is a + licensee, and is addressed as "you".</para> + +<para>A "Modified Version" of the Document means any work + containing the Document or a portion of it, either copied verbatim, + or with modifications and/or translated into another language.</para> + +<para>A "Secondary Section" is a named appendix or a front-matter + section of the Document that deals exclusively with the relationship + of the publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could fall + directly within that overall subject. (For example, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them.</para> + +<para>The "Invariant Sections" are certain Secondary Sections + whose titles are designated, as being those of Invariant Sections, + in the notice that says that the Document is released under this + License.</para> + +<para>The "Cover Texts" are certain short passages of text that + are listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License.</para> + +<para>A "Transparent" copy of the Document means a + machine-readable copy, represented in a format whose specification + is available to the general public, whose contents can be viewed and + edited directly and straightforwardly with generic text editors + or (for images composed of pixels) generic paint programs or + (for drawings) some widely available drawing editor, and that is + suitable for input to text formatters or for automatic translation + to a variety of formats suitable for input to text formatters. + A copy made in an otherwise Transparent file format whose markup + has been designed to thwart or discourage subsequent modification + by readers is not Transparent. A copy that is not "Transparent" + is called "Opaque".</para> + +<para>Examples of suitable formats for Transparent copies include + plain ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML designed for human modification. Opaque formats include + PostScript, PDF, proprietary formats that can be read and edited + only by proprietary word processors, SGML or XML for which the + DTD and/or processing tools are not generally available, and the + machine-generated HTML produced by some word processors for output + purposes only.</para> + +<para>The "Title Page" means, for a printed book, the title page + itself, plus such following pages as are needed to hold, legibly, + the material this License requires to appear in the title page. + For works in formats which do not have any title page as such, + "Title Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text.</para> +</sect3> + +<sect3 id="gfdl-2"> <title>VERBATIM COPYING</title> + +<para>You may copy and distribute the Document in any medium, + either commercially or noncommercially, provided that this License, + the copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that + you add no other conditions whatsoever to those of this License. + You may not use technical measures to obstruct or control the + reading or further copying of the copies you make or distribute. + However, you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3.</para> + +<para>You may also lend copies, under the same conditions stated + above, and you may publicly display copies.</para> +</sect3> + +<sect3 id="gfdl-3"> <title>COPYING IN QUANTITY</title> + +<para>If you publish printed copies of the Document numbering more + than 100, and the Document's license notice requires Cover Texts, you + must enclose the copies in covers that carry, clearly and legibly, + all these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The front + cover must present the full title with all words of the title equally + prominent and visible. You may add other material on the covers + in addition. Copying with changes limited to the covers, as long as + they preserve the title of the Document and satisfy these conditions, + can be treated as verbatim copying in other respects.</para> + +<para>If the required texts for either cover are too voluminous to + fit legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto adjacent + pages.</para> + +<para>If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with each + Opaque copy a publicly-accessible computer-network location containing + a complete Transparent copy of the Document, free of added material, + which the general network-using public has access to download + anonymously at no charge using public-standard network protocols. + If you use the latter option, you must take reasonably prudent steps, + when you begin distribution of Opaque copies in quantity, to ensure + that this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you distribute + an Opaque copy (directly or through your agents or retailers) of + that edition to the public.</para> + +<para>It is requested, but not required, that you contact the + authors of the Document well before redistributing any large number + of copies, to give them a chance to provide you with an updated + version of the Document.</para> +</sect3> + +<sect3 id="gfdl-4"> <title>MODIFICATIONS</title> + +<para>You may copy and distribute a Modified Version of the + Document under the conditions of sections 2 and 3 above, provided + that you release the Modified Version under precisely this License, + with the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version + to whoever possesses a copy of it. In addition, you must do these + things in the Modified Version:</para> + +<orderedlist numeration="upperalpha"> <listitem><para>Use in the +Title Page + (and on the covers, if any) a title distinct from that of the + Document, and from those of previous versions (which should, if + there were any, be listed in the History section of the Document). + You may use the same title as a previous version if the original + publisher of that version gives permission.</para> +</listitem> + +<listitem><para>List on the Title Page, + as authors, one or more persons or entities responsible for + authorship of the modifications in the Modified Version, together + with at least five of the principal authors of the Document (all + of its principal authors, if it has less than five).</para> +</listitem> + +<listitem><para>State on the Title page + the name of the publisher of the Modified Version, as the + publisher.</para> +</listitem> + +<listitem><para>Preserve all the + copyright notices of the Document.</para> +</listitem> + +<listitem><para>Add an appropriate + copyright notice for your modifications adjacent to the other + copyright notices.</para> +</listitem> + +<listitem><para>Include, immediately + after the copyright notices, a license notice giving the public + permission to use the Modified Version under the terms of this + License, in the form shown in the Addendum below.</para> +</listitem> + +<listitem><para>Preserve in that license + notice the full lists of Invariant Sections and required Cover + Texts given in the Document's license notice.</para> +</listitem> + +<listitem><para>Include an unaltered + copy of this License.</para> +</listitem> + +<listitem><para>Preserve the section + entitled "History", and its title, and add to it an item stating at + least the title, year, new authors, and publisher of the Modified + Version as given on the Title Page. If there is no section entitled + "History" in the Document, create one stating the title, year, + authors, and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in the + previous sentence.</para> +</listitem> + +<listitem><para>Preserve the network + location, if any, given in the Document for public access to + a Transparent copy of the Document, and likewise the network + locations given in the Document for previous versions it was + based on. These may be placed in the "History" section. You may + omit a network location for a work that was published at least four + years before the Document itself, or if the original publisher of + the version it refers to gives permission.</para> +</listitem> + +<listitem><para>In any section entitled + "Acknowledgements" or "Dedications", preserve the section's title, + and preserve in the section all the substance and tone of each + of the contributor acknowledgements and/or dedications given + therein.</para> +</listitem> + +<listitem><para>Preserve all the + Invariant Sections of the Document, unaltered in their text and in + their titles. Section numbers or the equivalent are not considered + part of the section titles.</para> +</listitem> + +<listitem><para>Delete any section + entitled "Endorsements". Such a section may not be included in + the Modified Version.</para> +</listitem> + +<listitem><para>Do not retitle any + existing section as "Endorsements" or to conflict in title with + any Invariant Section.</para> +</listitem> </orderedlist> <para>If the Modified Version includes new +front-matter sections + or appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other section + titles.</para> + +<para>You may add a section entitled "Endorsements", provided it + contains nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text has + been approved by an organization as the authoritative definition of + a standard.</para> + +<para>You may add a passage of up to five words as a Front-Cover + Text, and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document already + includes a cover text for the same cover, previously added by you or + by arrangement made by the same entity you are acting on behalf of, + you may not add another; but you may replace the old one, on explicit + permission from the previous publisher that added the old one.</para> + +<para>The author(s) and publisher(s) of the Document do not by + this License give permission to use their names for publicity for + or to assert or imply endorsement of any Modified Version.</para> +</sect3> + +<sect3 id="gfdl-5"> <title>COMBINING DOCUMENTS</title> + +<para>You may combine the Document with other documents released + under this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all of + the Invariant Sections of all of the original documents, unmodified, + and list them all as Invariant Sections of your combined work in + its license notice.</para> + +<para>The combined work need only contain one copy of this + License, and multiple identical Invariant Sections may be replaced + with a single copy. If there are multiple Invariant Sections with + the same name but different contents, make the title of each such + section unique by adding at the end of it, in parentheses, the + name of the original author or publisher of that section if known, + or else a unique number. Make the same adjustment to the section + titles in the list of Invariant Sections in the license notice of + the combined work.</para> + +<para>In the combination, you must combine any sections entitled + "History" in the various original documents, forming one section + entitled "History"; likewise combine any sections entitled + "Acknowledgements", and any sections entitled "Dedications". + You must delete all sections entitled "Endorsements."</para> +</sect3> + +<sect3 id="gfdl-6"> <title>COLLECTIONS OF DOCUMENTS</title> + +<para>You may make a collection consisting of the Document and + other documents released under this License, and replace the + individual copies of this License in the various documents with a + single copy that is included in the collection, provided that you + follow the rules of this License for verbatim copying of each of + the documents in all other respects.</para> + +<para>You may extract a single document from such a collection, + and distribute it individually under this License, provided you + insert a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document.</para> +</sect3> + +<sect3 id="gfdl-7"> <title>AGGREGATION WITH INDEPENDENT WORKS</title> +<para>A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume + of a storage or distribution medium, does not as a whole count + as a Modified Version of the Document, provided no compilation + copyright is claimed for the compilation. Such a compilation is + called an "aggregate", and this License does not apply to the other + self-contained works thus compiled with the Document, on account + of their being thus compiled, if they are not themselves derivative + works of the Document.</para> + +<para>If the Cover Text requirement of section 3 is applicable to + these copies of the Document, then if the Document is less than + one quarter of the entire aggregate, the Document's Cover Texts + may be placed on covers that surround only the Document within + the aggregate. Otherwise they must appear on covers around the + whole aggregate.</para> +</sect3> + +<sect3 id="gfdl-8"> <title>TRANSLATION</title> + +<para>Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section 4. + Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include + a translation of this License provided that you also include the + original English version of this License. In case of a disagreement + between the translation and the original English version of this + License, the original English version will prevail.</para> +</sect3> + +<sect3 id="gfdl-9"> <title>TERMINATION</title> <para>You may not copy, +modify, sublicense, or distribute the + Document except as expressly provided for under this License. + Any other attempt to copy, modify, sublicense or distribute the + Document is void, and will automatically terminate your rights under + this License. However, parties who have received copies, or rights, + from you under this License will not have their licenses terminated + so long as such parties remain in full compliance.</para> +</sect3> + +<sect3 id="gfdl-10"> <title>FUTURE REVISIONS OF THIS LICENSE</title> + +<para>The Free Software Foundation may publish new, revised + versions of the GNU Free Documentation License from + time to time. Such new versions will be similar + in spirit to the present version, but may differ in + detail to address new problems or concerns. See <ulink + url="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</ulink>.</para> + +<para>Each version of the License is given a distinguishing + version number. If the Document specifies that a particular + numbered version of this License "or any later version" applies + to it, you have the option of following the terms and conditions + either of that specified version or of any later version that has + been published (not as a draft) by the Free Software Foundation. + If the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation.</para> +</sect3> + +<sect3 id="gfdl-11"> <title>How to use this License for your +documents</title> + +<para>To use this License in a document you have written, include + a copy of the License in the document and put the following copyright + and license notices just after the title page:</para> + +<blockquote><para> Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.1 or any later version published by the Free Software + Foundation; with the Invariant Sections being LIST THEIR TITLES, + with the Front-Cover Texts being LIST, and with the Back-Cover + Texts being LIST. A copy of the license is included in the section + entitled "GNU Free Documentation License". +</para></blockquote> + +<para>If you have no Invariant Sections, write "with no Invariant + Sections" instead of saying which ones are invariant. If you + have no Front-Cover Texts, write "no Front-Cover Texts" instead of + "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.</para> + +<para>If your document contains nontrivial examples of program + code, we recommend releasing these examples in parallel under your + choice of free software license, such as the GNU General Public + License, to permit their use in free software.</para> +</sect3> </sect2> </sect1> + +</article> + diff --git a/web/mono-build-w32.sh b/web/mono-build-w32.sh new file mode 100755 index 00000000000..d9e1f963c79 --- /dev/null +++ b/web/mono-build-w32.sh @@ -0,0 +1,186 @@ +#!/bin/bash + +# Script to automate the building of mono and its dependencies on +# cygwin. Relies on wget being installed (could make it fall back to +# using lynx, links, w3, curl etc), assumes that gcc, make, tar, +# automake, etc are already installed too (may be worth testing for +# all that right at the top and bailing out if missing/too old/too new +# etc). + + +# See where we are. This will become the top level directory for the +# installation, unless we are given an alternative location +here=$1 +test -z "$here" && here=`pwd` + +echo "Building Mono and dependencies in $here, installing to $here/install" + +PATH=$here/install/bin:$here/install/lib:$PATH + +# Make sure cygwin's libiconv is installed, or libtool blows its tiny mind +if [ ! -f /usr/lib/libiconv.la ]; then + echo "You need to install the cygwin \"libiconv\" package!" + exit -1 +fi + +# Check mono out first, so we can run aclocal from inside the mono dir (it +# needs to see which version of the real aclocal to run) +test -z "$CVSROOT" && CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono +export CVSROOT + +echo "Updating mono" + +# cvs checkout does the same as cvs update, except that it copes with +# new modules being added + +# Older versions of cvs insist on a cvs login for :pserver: methods +# Make sure cvs is using ssh for :ext: methods + +if [ ${CVSROOT:0:5} = ":ext:" ]; then + CVS_RSH=ssh + export CVS_RSH +elif [ ${CVSROOT:0:9} = ":pserver:" ]; then + if ! grep $CVSROOT ~/.cvspass > /dev/null 2>&1 ; then + echo "Logging into CVS server. Anonymous CVS password is probably empty" + cvs login || exit -1 + fi +fi + +cvs checkout mono || exit -1 + +echo "Checking automake version" +automake_required="1.6.2" +automake_version=`automake --version | head -1 | awk '{print $4}' | tr -d '[a-zA-Z]' | sed 's/-.*$//g'` +echo "Found automake version $automake_version" +if expr $automake_version \< $automake_required > /dev/null; then + echo "Your automake is too old! You need version $automake_required or newer." + exit -1 +else + echo "Automake version new enough." +fi + +# Select the stable version anyway... +if [ ! -z "${AUTO_STABLE}" -o -e /usr/autotool/stable ]; then + export AUTO_STABLE=${AUTO_STABLE:-/usr/autotool/stable} + export AUTO_DEVEL=${AUTO_STABLE} +fi + +# Need to install pkgconfig and set ACLOCAL_FLAGS if there is not a +# pkgconfig installed already. Otherwise set PKG_CONFIG_PATH to the +# glib we're about to install in $here/install. + + +# --print-ac-dir was added in 1.2h according to the ChangeLog. This +# should mean that any automake new enough for us has it. + +# This sets ACLOCAL_FLAGS to point to the freshly installed pkgconfig +# if it doesnt already exist on the system (otherwise auto* breaks if +# it finds two copies of the m4 macros). The GIMP for Windows +# pkgconfig sets its prefix based on the location of its binary, so we +# dont need PKG_CONFIG_PATH (the internal pkgconfig config file +# $prefix is handled similarly). For the cygwin pkgconfig we do need to +# set it, and we need to edit the mingw pc files too. + +function aclocal_scan () { + # Quietly ignore the rogue '-I' and other aclocal flags that + # aren't actually directories... + # + # cd into mono/ so that the aclocal wrapper can work out which version + # of aclocal to run, and add /usr/share/aclocal too cos aclocal looks there + # too. + for i in `(cd mono && aclocal --print-ac-dir)` /usr/share/aclocal $ACLOCAL_FLAGS + do + if [ -f $i/$1 ]; then + return 0 + fi + done + + return 1 +} + +function install_package() { + zipfile=$1 + markerfile=$2 + name=$3 + + echo "Installing $name..." + if [ ! -f $here/$zipfile ]; then + wget http://www.go-mono.com/archive/$zipfile + fi + + # Assume that the package is installed correctly if the marker + # file is there + if [ ! -f $here/install/$markerfile ]; then + (cd $here/install || exit -1; unzip -o $here/$zipfile || exit -1) || exit -1 + fi +} + +# pkgconfig is only used during the build, so we can use the cygwin version +# if it exists +if aclocal_scan pkg.m4 ; then + install_pkgconfig=no +else + install_pkgconfig=yes +fi + +# But we still need to use the mingw libs for glib & co +ACLOCAL_FLAGS="-I $here/install/share/aclocal $ACLOCAL_FLAGS" + +export PATH +export ACLOCAL_FLAGS + +# Grab pkg-config, glib etc +if [ ! -d $here/install ]; then + mkdir $here/install || exit -1 +fi + +# Fetch and install pkg-config, glib, iconv, intl + +if [ $install_pkgconfig = "yes" ]; then + install_package pkgconfig-0.11-20020310.zip bin/pkg-config.exe pkgconfig +else + echo "Not installing pkgconfig, you already seem to have it installed" +fi +install_package glib-2.0.4-20020703.zip lib/libglib-2.0-0.dll glib +install_package glib-dev-2.0.4-20020703.zip lib/glib-2.0.lib glib-dev +install_package libiconv-1.7.zip lib/iconv.dll iconv +install_package libintl-0.10.40-20020101.zip lib/libintl-1.dll intl +install_package libgc-dev.zip lib/gc.dll gc-dev + +if [ $install_pkgconfig = "no" ]; then + echo "Fixing up the pkgconfig paths" + for i in $here/install/lib/pkgconfig/*.pc + do + mv $i $i.orig + sed -e "s@^prefix=/target\$@prefix=$here/install@" < $i.orig > $i + done + export PKG_CONFIG_PATH=$here/install/lib/pkgconfig +fi + +# Needed to find the libgc bits +CPPFLAGS="$CPPFLAGS -I$here/install/include" +LDFLAGS="$LDFLAGS -L$here/install/lib" +export CPPFLAGS +export LDFLAGS + +# Make sure we build native w32, not cygwin +#CC="gcc -mno-cygwin" +#export CC + +# --prefix is used to set the class library dir in mono, and it needs +# to be in windows-native form. It also needs to have '\' turned into +# '/' to avoid quoting issues during the build. +prefix=`cygpath -w $here/install | sed -e 's@\\\\@/@g'` + +# Build and install mono +echo "Building and installing mono" + +(cd $here/mono; ./autogen.sh --prefix=$prefix || exit -1; make || exit -1; make install || exit -1) || exit -1 + + +echo "" +echo "" +echo "All done." +echo "Add $here/install/bin and $here/install/lib to \$PATH" +echo "Don't forget to copy the class libraries to $here/install/lib" + diff --git a/web/mono-build.sh b/web/mono-build.sh new file mode 100755 index 00000000000..2cfaf6d6ff0 --- /dev/null +++ b/web/mono-build.sh @@ -0,0 +1,232 @@ +#! /usr/bin/env bash + +# Script to automate the building of mono and its dependencies. +# Relies on wget being installed (could make it fall back to using +# lynx, links, w3, curl etc), assumes that gcc, make, tar, automake, +# etc are already installed too (may be worth testing for all that +# right at the top and bailing out if missing/too old/too new etc). + + +# See where we are. This will become the top level directory for the +# installation, unless we are given an alternative location +here=$1 +test -z "$here" && here=`pwd` + +echo "Building Mono and dependencies in $here, installing to $here/install" + +PATH=$here/install/bin:$PATH +LD_LIBRARY_PATH=$here/install/lib:$LD_LIBRARY_PATH + +# Find a tool to fetch files. It must take an HTTP URL on the command line and +# save the file in the current directory. (It must also talk HTTP/1.1, which +# rules out BSD's ftp(1), at least on FreeBSD 4.4.) +viable_downloaders="wget fetch" +for i in $viable_downloaders +do + if which $i > /dev/null; then + downloader=`which $i` + break + fi +done + +if [ -z "$downloader" ]; then + echo "Can't find a commandline download tool (tried: $viable_downloaders)" + exit -1 +else + echo "Using $downloader to fetch files" +fi + +# We need to prefer GNU make if there's a choice. BSD make falls over in +# the glib build if gtk-doc is disabled. +viable_makers="gmake make" +for i in $viable_makers +do + if which $i > /dev/null; then + MAKE=$i + break + fi +done + +if [ -z "$MAKE" ]; then + echo "Can't find a make tool (tried: $viable_makers)" + exit -1 +else + echo "Using $MAKE" + export MAKE +fi + +# Need to install pkgconfig and set ACLOCAL_FLAGS if there is not a +# pkgconfig installed already. Otherwise set PKG_CONFIG_PATH to the +# glib we're about to install in $here/install. This script could +# attempt to be clever and see if glib 2 is already installed, too. + + +# --print-ac-dir was added in 1.2h according to the ChangeLog. This +# should mean that any automake new enough for us has it. + +function aclocal_scan () { + # Quietly ignore the rogue '-I' and other aclocal flags that + # aren't actually directories... + for i in `aclocal --print-ac-dir` $ACLOCAL_FLAGS + do + if [ -f $i/$1 ]; then + return 0 + fi + done + + return 1 +} + +function pkgconfig_scan () { + module=$1 + + echo "Finding pkgconfig files for $module..." + + # Should we use locate? or just a list of well-known directories? + # locate has the problem of false positives in src dirs + for i in /usr/lib/pkgconfig /usr/local/lib/pkgconfig + do + echo "Looking in $i..." + if [ -f $i/${module}.pc ]; then + echo $i + return + fi + done +} + +function install_package() { + tarfile=$1 + dirname=$2 + name=$3 + configure_options=$4 + + echo "Installing $name..." + if [ ! -f $here/$tarfile ]; then + (cd $here && $downloader http://www.go-mono.com/archive/$tarfile) + fi + + # Assume that the package built correctly if the dir is there + if [ ! -d $here/$dirname ]; then + # Build and install package + (cd $here && tar xzf $tarfile) || exit -1 + (cd $here/$dirname; ./configure --prefix=$here/install $configure_options || exit -1; $MAKE || exit -1; $MAKE install || exit -1) + success=$? + if [ $success -ne 0 ]; then + echo "***** $name build failure. Run rm -rf $here/$dirname to have this script attempt to build $name again next time" + exit -1 + fi + fi +} + +if aclocal_scan pkg.m4 ; then + install_pkgconfig=no +else + install_pkgconfig=yes +fi + +if aclocal_scan glib-2.0.m4 ; then + install_glib=no + if [ $install_pkgconfig = "yes" ]; then + # We have to tell the newly-installed pkgconfig about the + # system-installed glib + PKG_CONFIG_PATH=`pkgconfig_scan glib-2.0`:$PKG_CONFIG_PATH + fi +else + install_glib=yes + PKG_CONFIG_PATH="$here/install/lib/pkgconfig:$PKG_CONFIG_PATH" +fi + +if [ -f /usr/include/gc/gc.h ]; then + install_libgc=no +else + install_libgc=yes +fi + +if [ $install_pkgconfig = "yes" -o $install_glib = "yes" ]; then + ACLOCAL_FLAGS="-I $here/install/share/aclocal $ACLOCAL_FLAGS" +fi + +export PATH +export LD_LIBRARY_PATH +export ACLOCAL_FLAGS +export PKG_CONFIG_PATH + +# Freebsd puts iconv in /usr/local, so see if we need to add +# /usr/local/include and /usr/local/lib to CPPFLAGS and LDFLAGS. We could +# skip this if it would add /usr/include and /usr/lib, but leaving it +# shouldnt break anything. +iconvh=`locate include/iconv.h` +iconvh_dir=`dirname $iconvh` +iconvlib_dir=`echo $iconvh_dir | sed -e 's/include/lib/'` + +echo "Adding $iconvh_dir to CPPFLAGS" +echo "Adding $iconvlib_dir to LDFLAGS" + +CPPFLAGS="$CPPFLAGS -I$here/install/include -I$iconvh_dir" +LDFLAGS="$LDFLAGS -L$here/install/lib -L$iconvlib_dir" +export CPPFLAGS +export LDFLAGS + +# Grab pkg-config, glib and libgc if necessary + +if [ $install_pkgconfig = "yes" ]; then + install_package pkgconfig-0.8.0.tar.gz pkgconfig-0.8.0 pkgconfig "" +else + echo "Not installing pkgconfig, you already seem to have it installed" +fi + +if [ $install_glib = "yes" ]; then + install_package glib-2.0.6.tar.gz glib-2.0.6 glib "" +else + echo "Not installing glib, you already seem to have it installed" +fi + +if [ $install_libgc = "yes" ]; then + install_package gc6.1alpha5.tar.gz gc6.1alpha5 libgc "--enable-threads=pthreads" + # make install didnt do the headers! + mkdir -p $here/install/include/gc + cp -r $here/gc6.1alpha5/include/* $here/install/include/gc +else + echo "Not installing libgc, you already seem to have it installed" +fi + +# End of build dependencies, now get the latest mono checkout and build that + +test -z "$CVSROOT" && CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono +export CVSROOT + +echo "Updating mono" + +# cvs checkout does the same as cvs update, except that it copes with +# new modules being added + +# Older versions of cvs insist on a cvs login for :pserver: methods +# Make sure cvs is using ssh for :ext: methods + +if [ ${CVSROOT:0:5} = ":ext:" ]; then + CVS_RSH=ssh + export CVS_RSH +elif [ ${CVSROOT:0:9} = ":pserver:" ]; then + # Chop off the trailing /mono because cvs 1.11 adds the port number + # into the .cvspass line + if ! grep ${CVSROOT%:/mono} ~/.cvspass > /dev/null 2>&1 ; then + echo "Logging into CVS server. Anonymous CVS password is probably empty" + cvs login + fi +fi + +(cd $here && cvs checkout mono) || exit -1 + +# Build and install mono +echo "Building and installing mono" + +(cd $here/mono; ./autogen.sh --prefix=$here/install || exit -1; $MAKE || exit -1; $MAKE install || exit -1) || exit -1 + + +echo "" +echo "" +echo "All done." +echo "Add $here/install/bin to \$PATH" +echo "Add $here/install/lib to \$LD_LIBRARY_PATH" +echo "Don't forget to copy the class libraries to $here/install/lib" + diff --git a/web/mono-contribution-howto b/web/mono-contribution-howto new file mode 100644 index 00000000000..ea3a4eaae53 --- /dev/null +++ b/web/mono-contribution-howto @@ -0,0 +1,551 @@ + + <Mono newbie coders start file> + <h1> A little help for mono newbie coders </h1> + + + For those who are new to Mono and are impatient to contribute + with code (uhh... you are brave!!) here is the document you + should read. + + + You will see all Mono hackers say the same (great minds have + similar way of thinking): First, DO WRITE TESTS!!!. In order + to do that: + + <ul> + * Start with the NUnit Tests Guidelines. In the cvs + they are located at: mcs/class/doc/NUnitGuideli... + + * But wait, this is a document for impatient + people. So EVERYTHING should be here. Well, it is. + </ul> + + + <h2> The NUnit Tests Guidelines document </h2> + + Mono NUnit Test Guidelines and Best Practices + + Authors: Nick Drochak <ndrochak@gol.com> + Martin Baulig <martin@gnome.org> + Last Update: 2002-03-02 + Rev: 0.3 + + <b> Purpose </b> + + This document captures all the good ideas people have had + about writing NUnit tests for the mono project. This document + will be useful for anyone who writes or maintains unit tests. + + <b> Other resources </b> + + - mcs/class/README has an explanation of the build process and + how it relates to the tests. + - http://nunit.sourceforge.net is the place to find out about + NUnit + + <b> Getting Started </b> + + If you are new to writing NUnit tests, there is a template + you may use to help get started. The file is: + + mcs/class/doc/TemplateTest.cs + + + (2.- This is the point two!. This file is just after the end + of the guidelines. Copy/paste it in another buffer. And keep + reading.) + + Save a copy of this file in the appropriate test subdirecty + (see below), and replace all the [text] markers with + appropriate code. Comments in the template are there to guide + you. You should also look at existing tests to see how other + people have written them. + + mcs/class/corlib/Test/System.Collections/CollectionBaseTest.cs + + is a small one that might help. + + (3.- You reached the third point. And as expected, it's just + here to tell you that the content of CollectionBaseTest.cs is + after the TemplateTest.cs code at the end of these + guidelines.) + + The directory that will contain your new file depends on the + assembly/namespace of the class for which you are creating the + tests. Under mcs/class there is a directory for each assembly. + In each assembly there is a Test directory, e.g. + mcs/class/corlib/Test. In the Test directory there are + sub-directories for each namespace in the assembly, e.g. + mcs/class/corlib/Test/Sytem. Put your new test file in the + appropriate sub-directory under Test for the class you are + testing. + + Once your test class is complete, you need to add it to the + AllTests.cs file in the same directory as your new test. Add a + call to "suite.AddTest()" passing the name of your new test + class's suite property as the parameter. You will see examples + in the AllTests.cs file, so just copy and paste inside there. + + Once all of that is done, you can do a 'make test' from the top + mcs directory. Your test class will be automagically included + in the build and the tests will be run along with all the + others. + + <b> Tips </b> + + <b> Provide an unique error message for Assert() </b> + + Include an unique message for each Assert() so that when the + assert fails, it is trivial to locate the failing one. + Otherwise, it may be difficult to determine which part of the + test is failing. A good way to ensure unique messages is to use + something like #A01, #A02 etc. + + Bad: +<pre> + AssertEquals("array match", compare[0], i1[0]); + AssertEquals("array match", compare[1], i1[1]); + AssertEquals("array match", compare[2], i1[2]); + AssertEquals("array match", compare[3], i1[3]); +</pre> + Good: +<pre> + AssertEquals("#A01", compare[0], i1[0]); + AssertEquals("#A02", compare[1], i1[1]); + AssertEquals("#A03", compare[2], i1[2]); + AssertEquals("#A04", compare[3], i1[3]); +</pre> + Once you used such a number in an Assert(), don't change it + later on - people might use it it identify the test in bug + reports or in mailing lists. + + <b> Use AssertEquals() to compare things, not Assert(). </b> + + Never compare two values with Assert() - if the test fails, + people have no idea what went wrong while AssertEquals() + reports the failed value. + + Bad: +<pre> + Assert ("A01", myTicks[0] == t1.Ticks); +</pre> + Good: +<pre> + AssertEquals ("A01", myTicks[0], t1.Ticks); +</pre> + + <b> Constructors </b> + + When writing your testcase, please make sure to provide a + constructor which takes no arguments: + +<pre> + public class DateTimeTest : TestCase + { + + public DateTimeTest() : base ("[MonoTests.System.DateTimeTest]") {} + public DateTimeTest (string name): base(name) {} + + public static ITest Suite + { + get { + TestSuite suite = new TestSuite (); + return suite; + } + } + } +</pre> + + <b> Namespace </b> + + Please keep the namespace within each test directory + consistent - all tests which are referenced in the same + AllTests.cs must be in the same namespace. Of course you can + use subnamespaces as you like - especially for subdirectories + of your testsuite. + + For instance, if your AllTests.cs is in namespace "MonoTests" + and you have a subdirectory called "System", you can put all + the tests in that dir into namespace "MonoTests.System". + + <b> Test your test with the microsoft runtime </b> + + If possible, try to run your testsuite with the Microsoft + runtime on Windows and make sure all tests in it pass. This is + especially important if you're writing a totally new testcase + - without this check you can never be sure that your testcase + contains no bugs .... + + Don't worry if you're writing your test on Linux, other people + can test it for you on Windows. + + Sometimes you may discover that a test doesn't show the + expected result when run with the Microsoft runtime - either + because there is a bug in their runtime or something is + misleading or wrong in their documentation. In this case, + please put a detailed description of the problem to + mcs/class/doc/API-notes and do also report it to the list - + we'll forward this to the Microsoft people from time to time + to help them fix their documentation and runtime. + +<pre> +-------------------- TemplateTest.cs begins ---------- + + // this is a template for making NUnit tests. Text enclosed + // in square brackets (and the brackets themselves) should be + // replaced by appropiate code. + + // [File Name].cs - NUnit Test Cases for [explain here] + // + // [Author Name] ([Author email Address]) + // + // (C) [Copyright holder] + // + + // these are the standard namespaces you will need. You may + // need to add more depending on your tests. + using NUnit.Framework; + using System; + + // all test namespaces start with "MonoTests." Append the + // Namespace that contains the class you are testing, e.g. + // MonoTests.System.Collections + namespace MonoTests.[Namespace] + { + + // the class name should end with "Test" and start with the name + // of the class you are testing, e.g. CollectionBaseTest + public class [Class to be tested]Test : TestCase { + + // there should be two constructors for your class. The first + // one (without parameters) should set the name to something + // unique. + // Of course the name of the method is the same as the name of + // the class + public [Constructor]() : base ("[Namespace.Class]") {} + public [Constructor](string name) : base(name) {} + + // this method is run before each Test* method is called. You + // can put variable initialization, etc. here that is common to + // each test. + // Just leave the method empty if you don't need to use it. + protected override void SetUp() {} + + // this method is run after each Test* method is called. You + // can put clean-up code, etc. here. Whatever needs to be done + // after each test. Just leave the method empty if you don't need + // to use it. + protected override void TearDown() {} + + // this property is required. You need change the parameter for + // typeof() below to be your class. + public static ITest Suite { + get { + return new TestSuite(typeof([Classname here])); + } + } + + // this is just one of probably many test methods in your test + // class. each test method must start with "Test". All methods + // in your class which start with "Test" will be automagically + // called by the NUnit framework. + public void Test[Something] { + // inside here you will exercise your class and then + // call Assert() + } +} + +---------------------- TemplateTest.cs ends -------------- + +---------------------- CollectionBaseTest.cs begins ------ + // + // System.Collections.CollectionBase + // Test suite for System.Collections.CollectionBase + // + // Author: + // Nick D. Drochak II + // + // (C) 2001 Nick D. Drochak II + // + + + using System; + using System.Collections; + using NUnit.Framework; + + namespace MonoTests.System.Collections + { + + public class CollectionBaseTest : TestCase + { + public CollectionBaseTest () : base + ("System.Collection.CollectionBase testsuite") + {} + public CollectionBaseTest (String name) : base (name) + {} + + // We need a concrete class to test the abstract base + // class + public class ConcreteCollection : CollectionBase + { + // These fields are used as markers to test + // the On* hooks. + public bool onClearFired; + public bool onClearCompleteFired; + + public bool onInsertFired; + public int onInsertIndex; + public bool onInsertCompleteFired; + public int onInsertCompleteIndex; + + public bool onRemoveFired; + public int onRemoveIndex; + public bool onRemoveCompleteFired; + public int onRemoveCompleteIndex; + + public bool onSetFired; + public int onSetOldValue; + public int onSetNewValue; + public bool onSetCompleteFired; + public int onSetCompleteOldValue; + public int onSetCompleteNewValue; + + // This constructor is used to test OnValid() + public ConcreteCollection() + { + IList listObj; + listObj = this; + listObj.Add(null); + } + + // This constructor puts consecutive integers into the list + public ConcreteCollection(int i) { + IList listObj; + listObj = this; + + int j; + for (j = 0; j< i; j++) { + listObj.Add(j); + } + } + + // A helper method to look at a value in the + // list at a specific index + public int PeekAt(int index) + { + IList listObj; + listObj = this; + return (int) listObj[index]; + } + + // Mark the flag if this hook is fired + protected override void OnClear() { + this.onClearFired = true; + } + + // Mark the flag if this hook is fired + protected override void OnClearComplete() + { + this.onClearCompleteFired = true; + } + + // Mark the flag, and save the paramter if + // this hook is fired + protected override void OnInsert(int index, + object value) + { + this.onInsertFired = true; + this.onInsertIndex = index; + } + + // Mark the flag, and save the paramter if + // this hook is fired + protected override void OnInsertComplete(int index, + object value) + { + this.onInsertCompleteFired = true; + this.onInsertCompleteIndex = index; + } + + // Mark the flag, and save the paramter if this hook + // is fired + protected override void OnRemove(int index, + object value) + { + this.onRemoveFired = true; + this.onRemoveIndex = index; + } + + // Mark the flag, and save the paramter if this hook + // is fired + protected override void OnRemoveComplete(int index, + object value) + { + this.onRemoveCompleteFired = true; + this.onRemoveCompleteIndex = index; + } + + // Mark the flag, and save the paramters if this hook + // is fired + protected override void OnSet(int index, object oldValue, + object newValue) + { + this.onSetFired = true; + this.onSetOldValue = (int) oldValue; + this.onSetNewValue = (int) newValue; + } + + // Mark the flag, and save the paramters if this hook + // is fired + protected override void OnSetComplete(int index, + object oldValue, + object newValue) + { + this.onSetCompleteFired = true; + this.onSetCompleteOldValue = (int) oldValue; + this.onSetCompleteNewValue = (int) newValue; + } + } // public class ConcreteCollection + + public static ITest Suite { + get { + return new TestSuite + (typeof(CollectionBaseTest)); + } + } + + // Check the count property + public void TestCount() { + ConcreteCollection myCollection; + myCollection = new ConcreteCollection(4); + Assert(4 == myCollection.Count); + } + + // Make sure GetEnumerator returns an object + public void TestGetEnumerator() { + ConcreteCollection myCollection; + myCollection = new ConcreteCollection(4); + Assert(null != myCollection.GetEnumerator()); + } + + // OnValid disallows nulls + public void TestOnValid() { + ConcreteCollection myCollection; + try { + myCollection = new ConcreteCollection(); + } + catch (ArgumentNullException) { + } + } + + // Test various Insert paths + public void TestInsert() { + ConcreteCollection myCollection; + int numberOfItems; + numberOfItems = 3; + // The constructor inserts + myCollection = new ConcreteCollection(numberOfItems); + Assert(myCollection.onInsertFired); + Assert(myCollection.onInsertCompleteFired); + + // Using the IList interface, check inserts in the middle + IList listObj = myCollection; + listObj.Insert(1, 9); + Assert(myCollection.onInsertIndex == 1); + Assert(myCollection.onInsertCompleteIndex == 1); + Assert(myCollection.PeekAt(1) == 9); + } + + // Test Clear and it's hooks + public void TestClear() + { + ConcreteCollection myCollection; + int numberOfItems; + numberOfItems = 1; + myCollection = new ConcreteCollection(numberOfItems); + myCollection.Clear(); + Assert(myCollection.Count == 0); + Assert(myCollection.onClearFired); + Assert(myCollection.onClearCompleteFired); + } + + // Test RemoveAt, other removes and the hooks + public void TestRemove() + { + ConcreteCollection myCollection; + int numberOfItems; + numberOfItems = 3; + // Set up a test collection + myCollection = new ConcreteCollection(numberOfItems); + + // The list is 0-based. So if we remove the second one + myCollection.RemoveAt(1); + + // We should see the original third one in it's place + Assert(myCollection.PeekAt(1) == 2); + Assert(myCollection.onRemoveFired); + Assert(myCollection.onRemoveIndex == 1); + Assert(myCollection.onRemoveCompleteFired); + Assert(myCollection.onRemoveCompleteIndex == 1); + IList listObj = myCollection; + listObj.Remove(0); + // Confirm parameters are being passed to the hooks + Assert(myCollection.onRemoveIndex == 0); + Assert(myCollection.onRemoveCompleteIndex == 0); + } + + // Test the random access feature + public void TestSet() + { + ConcreteCollection myCollection; + int numberOfItems; + numberOfItems = 3; + myCollection = new ConcreteCollection(numberOfItems); + IList listObj = myCollection; + listObj[0] = 99; + Assert((int) listObj[0] == 99); + Assert(myCollection.onSetFired); + Assert(myCollection.onSetCompleteFired); + Assert(myCollection.onSetOldValue == 0); + Assert(myCollection.onSetCompleteOldValue == 0); + Assert(myCollection.onSetNewValue == 99); + Assert(myCollection.onSetCompleteNewValue == 99); + } +} + +} +----------------------- CollectionBaseTest.cs ends -------- + +</pre> + <ul> + * If you use Emacs, you might want to use the .emacs + file and the package developed by Brad Merrill + mailto:zbrad@cybercom.net. It will allow you to + highlight and indent in C# style in your Emacs + editor. (XEmacs will still work but it'll also + complain). + + * CSharpDevelop is a GPLed IDE developed by IC#Code. + Search for it at sourceforge if you are interested + in it. + + * For those who Java: "A comparison of Microsoft's + C# programming language to Sun Microsystem's Java + Programming language" by Dare Obasanjo is a really good + (very complete) text to read. + + * Suggest this point and more, now I can't think of + anything more. + </ul> + + Enjoy!!. + + (c) 2002, <a href="mailto:jaime@geneura.ugr.es">Jaime Anguiano Olarra</a>. + + The parts included in this document are property of their + respective authors. + + Note: The identation of the source code has been changed a bit + so it could fit better in the website. Anyway, as nothing more + changed, the files should work as expected. + diff --git a/web/monodoc-xml b/web/monodoc-xml new file mode 100644 index 00000000000..e8a5ffe2c71 --- /dev/null +++ b/web/monodoc-xml @@ -0,0 +1,755 @@ +* MonoDoc XML Tag Reference + +** Introduction + +<em> +[This documentation is in progress. Comments to +<a href="mailto:jbarn@httcb.net">jbarn@httcb.net</a> and/or +<a href="mailto:mono-docs-list@ximian.com">mono-docs-list@ximian.com</a>.] +</em> + +MonoDoc XML, our format for multilingual API documentation stored outside of +source files, is very similar to the output of Microsoft's csc /doc. Minor +alterations have been made to ease human parsing and hand-editing, but +the majority of the tags are identical. In fact, many of the descriptions +and examples below are taken from the ECMA C# Language Specification with +little or no alteration. + +This document provides a list of all available MonoDoc XML tags, with +syntax and examples. A complete example can be found in +<a href="#appendix-a">Appendix A</a>, and both a <a href="#">DTD</a> and +<a href="#">XSD schema</a> will be available very shortly. + +** MonoDoc XML Tags + +<dl> +<dt><code><a href="#c"><c></a></code></dt> +<dd>Mark short sections of text as code.</dd> + +<dt><code><code><a href="#code"><code></a></code></dt></code> +<dd>Mark one or more lines as code or output.</dd> + +<dt><code><a href="#doc"><doc></a></dt></code> +<dd>Root element of documentation XML.</dd> + +<dt><code><a href="#event"><event></a></dt></code> +<dd>Describe an event.</dd> + +<dt><code><a href="#example"><example></a></dt></code> +<dd>An example.</dd> + +<dt><code><a href="#exception"><exception></a></dt></code> +<dd>Specify an exception a method can throw.</dd> + +<dt><code><a href="#field"><field></a></dt></code> +<dd>Describe a field.</dd> + +<dt><code><a href="#list"><list></a></dt></code> +<dd>Create a list or table.</dd> + +<dt><code><a href="#method"><method></a></dt></code> +<dd>Describe a method.</dd> + +<dt><code><a href="#para"><para></a></dt></code> +<dd>Allow text to be structured in paragraphs.</dd> + +<dt><code><a href="#param"><param></a></dt></code> +<dd>Specify a parameter for a method.</dd> + +<dt><code><a href="#paramref"><paramref></a></dt></code> +<dd>Mark a word as a parameter.</dd> + +<dt><code><a href="#permission"><permission></a></dt></code> +<dd>Define the access level of a member.</dd> + +<dt><code><a href="#property"><property></a></dt></code> +<dd>Describe a property.</dd> + +<dt><code><a href="#remarks"><remarks></a></dt></code> +<dd>Provide verbose information for a type or member.</dd> + +<dt><code><a href="#returns"><returns></a></dt></code> +<dd>Specify the return value of a method.</dd> + +<dt><code><a href="#see"><see></a></dt></code> +<dd>Specify a link.</dd> + +<dt><code><a href="#seealso"><seealso></a></dt></code> +<dd>Specify a 'see also' entry.</dd> + +<dt><code><a href="#summary"><summary></a></dt></code> +<dd>Provide a brief (usually one sentence) description of a member or type.</dd> + +<dt><code><a href="#type"><type></a></dt></code> +<dd>Describe a type.</dd> +</dl> + +** Definitions and Examples + +*** <a name="c"><c></a> + +This tag can be used to mark short, inline fragments of text that should +be considered source code or program output. User agents should render +this tag in a special -- likely monospace -- font. For larger sections, +use <a href="#code"><code><code></code></a>. + +**** Syntax + +<pre> +<c>code or output text</c> +</pre> + +**** Example + +<pre> +<remarks> + Class <c>Point</c> models a point in two-dimensional space. +</remarks> +</pre> + +*** <a name="code"><code></a> + +This tag can be used to mark one or more lines of text as source code or +program output. User agents should render this tag in a special (likely +monospace) font, and preserve both whitespace and newlines. + +**** Syntax + + <code><code>source or program output</code></code> + +**** Example + +<pre> +<summary> + This method changes the point's location by the given + x- and y-offsets. + <example lang="C#"> + A C# example: + <code> + Point p = new Point(3, 5); + p.Translate(-1, 3); + // p == (2, 8); + </code> + </example> +</summary> +</pre> + +*** <a name="doc"><doc></a> + +This tag is the root element of the documentation file. It can contain +any number of <type> elements. + +**** Syntax + +<code><doc lang="language" assembly="assembly">typedocs</doc></code> + +<blockquote> +<em>lang="language"</em><br /> +The two-letter ISO code that specifies what language the contained +documentation is written in. +</blockquote> + +**** Example + +<pre> +<doc lang="en"> + <type name="Graphics.Point"> + <!-- ... --> + </type> +</doc> +</pre> + +*** <a name="event"><event></a> + +This tag documents an event. + +**** Syntax + +<code><event name="eventname">documentation</event></code> + +<blockquote> +<em>name="eventname"</em><br /> +The name of the event being documented. +</blockquote> + +**** Example + +<pre> +<event name="Click"> + <summary> + Occurs when the control is clicked. + </summary> + <data> + The event handler receives an argument of type EventArgs + containing data related to this event. + </data> + <remarks> + <para>The ControlStyles.StandardClick style must be set + for this event to be raised.</para> + <para>For more information about handling events, see + Consuming Events.</para> + </remarks> +</event> +</pre> + +*** <a name="example"><example></a> + +This tag marks a section of text as an example, and optionally specifies +what programming language <code><a href="#code"><code></a></code> portions of the example are written in. + +**** Syntax + +<code><example lang="language">example text and code</example></code> + +<blockquote> +<em>lang="language"</em><br /> +(optional) The name of the programming language <code><a href="#code"><code></a></code> blocks in this example +use. This information can be used by user agents to provide +intelligent access to examples in multiple languages. +</blockquote> + +**** Example + +See <code><a href="#code"><code><a/></code> for an example. + +*** <a name="exception"><exception></a> + +This tag provides a way to specify the exceptions a method can throw. + +**** Syntax + +<code><exception cref="exception-type">description</exception></code> + +<blockquote> +<em>cref="exception-type"</em><br /> +The name of an exception type. +</blockquote> + +**** Example + +<pre> +<exception cref="System.IO.FileNotFoundException"> + Thrown when the requested file is not found. +</exception> +</pre> + +*** <a name="field"><field></a> + +This tag is used to describe a field. + +**** Syntax + +<code><field name="fieldname">documentation</field></code> + +<blockquote> +<em>name="fieldname"</em><br /> +The name of the field being documented. +</blockquote> + +**** Example + +<pre> +<field name="x"> + <summary> + Instance variable <c>x</c> represents the point's + x-coordinate. + </summary> +</field> +</pre> + +*** <a name="list"><list></a> + +This tag is used to create a list or table of items. It may contain a +<code><listheader></code> block to define the heading row of either a table or +definition list. (When defining a table, only an entry for 'term' in the +heading need be supplied.) + +Each item in the list is specified with an <code><item></code> block. When creating a +definition list, both <code><term></code> and <code><description></code> must be specified. +However, for a table, bulleted list, or numbered list, only <code><description></code> +need be specified. + +**** Syntax + +<pre> +<list type="bullet" | "number" | "table"> + <listheader> + <term>term</term> + <description>description</description> + </listheader> + <item> + <term>term</term> + <description>description</description> + </item> + + ... + +</list> +</pre> + +<blockquote> +<em>term</em><br /> +The term to define, whose definition is in <code><description></code>. +<br /><br /> +<em>description</em><br /> +Either an item in a bullet or numbered list, or the definition of a <code><term></code>. +</blockquote> + +**** Example + +<pre> +<list type="bullet"> + <item> + <description>Item 1</description> + </item> + <item> + <description>Item 2</description> + </item> +</list> +</pre> + +*** <a name="method"><method></a> + +This tag is the overall containing tag for documenting a method. + +**** Syntax + +<code><method name="methodname">documentation</method></code> + +**** Example + +<pre> +<method name="op_Equality(Graphics.Point,Graphics.Point)"> + <summary> + This operator determines whether two points have + the same location. + </summary> + <param name="p1"> + <c>p1</c> is the first Point to be compared. + </param> + <param name="p2"> + <c>p2</c> is the second Point to be compared. + </param> + <returns> + True if the points have the same location and they + have the exact same type; otherwise, false. + </returns> + <seealso cref="Equals(System.Object)" /> + <seealso cref="op_Inequality(Graphics.Point,Graphics.Point)" /> +</method> +</pre> + +*** <a name="para"><para></a> + + +This tag is for use inside other tags such as <code><remarks></code> or <code><returns></code>, and +allows text to be structured into paragraphs. + +**** Syntax + +<code><para>text</para></code> + +**** Example + +<pre> +<summary> + <para> + This is the entry point of the <c>Point</c> class testing + program. + </para> + <para> + This program tests each method and operator, and + is intended to be run after any non-trivial maintenance has + been performed on the <c>Point</c> class. + </para> +</summary> +</pre> + +*** <a name="param"><param></a> + +This tag is used to describe a parameter for a method, constructor, or +indexer. + +**** Syntax + +<code><param name="name">description</param></code> + +<blockquote> +<em>name</em><br /> +The name of the parameter. +</blockquote> + +**** Example + +<pre> +<summary> + This is the entry point of the <c>Point</c> + class. +</summary> +<param name="xor"><c>xor</c> is the new x-coordinate.</param> +<param name "yor"><c>yor</c> is the new y-coordinate.</param> +</pre> + +*** <a name="paramref"><paramref></a> + +This tag is used to indicate that a word is a parameter. User agents +could use this information for special formatting or hyperlink insertion. + +**** Syntax + +<code><paramref name="name" /></code> + +<blockquote> +<em>name</em><br /> +The name of the parameter. +</blockquote> + +**** Example + +<pre> +<summary> + This constructor initializes the new Point to + (<paramref name="xor" />,<paramref name="yor" />). +</summary> +<param name="xor"><c>xor</c> is the new x-coordinate.</param> +<param name "yor"><c>yor</c> is the new y-coordinate.</param> +</pre> + +*** <a name="permission"><permission></a> + +This tag allows the security accessibility of a member to be documented. + +**** Syntax + +<code><permission cref="member">description</permission></code> + +<blockquote> +<em>cref="member"</em><br /> +The name of a member.</br> +</blockquote> + +**** Example + +<pre> +<permission cref="System.Security.PermissionSet"> + Everyone can access this method. +</permission> +</pre> + +*** <a name="property"><property></a> + +This tag is the overall containing tag for documenting a property. + +**** Syntax + +<code><property name="propertyname">documentation</property></code> + +<blockquote> +<em>name="propertyname"</em><br /> +The name of the property. +</blockquote> + +**** Example + +<pre> +<property name="X"> + <summary> + Gets or sets the point's x-coordinate. + <value> + The point's x-coordinate. + </value> +</property> +</pre> + + +*** <a name="remarks"><remarks></a> + +This tag contains extended discussion and information about a member or +a type. <em>[jbarn: This differs from both the ECMA docs and +portions of Microsoft's documentation, but seems consistent with both +common usage, and, more importantly, NDoc convention.]</em> + +**** Syntax + +<code><remarks>description</remarks></code> + +**** Example + +<pre> +<type name="Graphics.Point"> + <summary> + Models a point in a two-dimensional plane. + </summary> + <remarks> + Herein I might have an extended discussion of + the validity of Cartesian coordinate systems, + with examples pro and con, and perhaps + some code. + </remarks> + + <!-- ... --> +</type> +</pre> + +*** <a name="returns"><returns></a> + +This tag is used to describe the return value of a method. + +**** Syntax + +<code><returns>description</returns></code> + +**** Example + +<pre> +<method name="op_Inequality(Graphics.Point,Graphics.Point)"> + <summary> + This operator determines whether two points have the + same location. + </summary> + <param name="p1"><c>p1</c> is the first Point to be compared.</param> + <param name="p2"><c>p2</c> is the second Point to be compared.</param> + <returns> + True if the points do not have the same location and they + have the exact same type; otherwise, false. + </returns> +</method> +</pre> + +*** <a name="see"><see></a> + +This tag allows a link to be specified within documentation text. (Use +<code><seealso></code> to indicate links that should appear in a 'See Also' section.) + +**** Syntax + +<code><see cref="destination" /></code> + +<blockquote> +<em>cref="destination"</em><br /> +A destination, such as a type or a member of a type. +</blockquote> + +**** Example + +<pre> +<summary> + This method changes the point's location to the given + coordinates. This is an asinine way to insert a link, + but <see cref="Equals(Object)" /> to understand + how points are compared. +</summary> +</pre> + +*** <a name="seealso"><seealso></a> + +This tag allows an entry to be generated for the 'See Also' section. (Use +<code><see></code> to specify a link from within text.) + +**** Syntax + +<code><seealso cref="destination" /></code> + +<blockquote> +<em>cref="destination"</em><br /> +A destination, such as a type or a member of a type. +</blockquote> + +**** Example + +<pre> +<summary> + This method determines whether two Points have the + same location. +</summary> +<seealso cref="op_Equality(Graphics.Point,Graphics.Point)" /> +<seealso cref="op_Inequality(Graphics.Point,Graphics.Point" /> +</pre> + +*** <a name="summary"><summary></a> + +This tag contains a short summary of a member or type, +often one sentence. <em>[jbarn: This differs from both the ECMA docs and +portions of Microsoft's documentation, but seems consistent with both +common usage, and, more importantly, NDoc convention.]</em> + +**** Syntax + +<code><summary>description</summary></code> + +**** Example + +<pre> +<summary> + This is the entry point of the <c>Point</c> class testing + program. +</summary> +<remarks> + This program tests each method an operator, and is intended + to be run after any non-trivial maintenance is performed + on the <c>Point</c> class. +</remarks> +</pre> + +*** <a name="type"><type></a> + +This tag is the overall containing tag for documenting a type. + +**** Syntax + +<code><type name="typename" assembly="assemblyname">documentation</type></code> + +<blockquote> +<em>name="typename"</em><br /> +The name of the type being documented. +<br /><br /> +<em>assembly="assemblyname"</em><br /> +The assembly this type resides in. This attribute is not required for nested types. +</blockquote> + +**** Example + +<pre> +<type name="Graphics.Point" assembly="Point"> + <summary> + Models a point in two-dimensional space. + </summary> + + <!-- members --> + + <field name="x"> + <summary> + Represents the point's x-coordinate. + </summary> + </field> +</type> +</pre> + +** <a name="appendix-a">Appendix A: Complete Example</a> + +<em>[jbarn: Please, please, don't take the human-readable portions of +this example to be good guidelines for writing your own documentation. +this XML is intended only to show structure.]</em> + +<pre> +<?xml version="1.0" encoding="UTF-8"?> +<doc lang="en"> + <type name="Graphics.Point" assembly="Point"> + <summary> + Models a point in a two-dimensional plane. + </summary> + <remarks> + No useful remarks. + </remarks> + + <!-- fields --> + <field name="x"> + <summary> + Instance variable <c>x</c> represents the point's x-coordinate. + </summary> + </field> + + <field name="y"> + <summary> + Instance variable <c>y</c> represents the point's y-coordinate. + </summary> + </field> + + <!-- methods --> + <method name="#ctor"> + <summary> + Initializes the new point to <c>(0,0)</c>. + </summary> + </method> + + <method name="#ctor(System.Int32,System.Int32)"> + <summary> + Initializes the new Point to (<paramref name="xor" />,<paramref name="yor" />). + </summary> + <param name="xor"><c>xor</c> is the new x-coordinate.</param> + <param name="yor"><c>yor</c> is the new y-coordinate.</param> + </method> + + <method name="Move(System.Int32,System.Int32)"> + <summary> + This method changes the point's location to the given coordinates. + </summary> + <param name="xor"><c>xor</c> is the new x-coordinate.</param> + <param name="yor"><c>yor</c> is the new y-coordinate.</param> + <seealso cref="Translate(System.Int32,System.Int32)" /> + </method> + + <method name="Translate(System.Int32,System.Int32)"> + <summary>This method changes the point's location by the given x- and y-offsets.</summary> + <remarks> + <example lang="C#"> + A C# example: + <code> + Point p = new Point(3, 5); + p.Translate(-1, 3); + </code> + This code results in <c>p</c> having the value (2,8). + </example> + </remarks> + <param name="xor"><c>xor</c> is the relative x-offset.</param> + <param name="yor"><c>yor</c> is the relative y-offset.</param> + <seealso cref="Move(System.Int32,System.Int32)" /> + </method> + + <method name="Equals(System.Object)"> + <summary>This method determines whether two points have the same location.</summary> + <param name="o"><c>o</c> is the object to be compared to the current object.</param> + <returns>True if the Points have the same location and they have the exact same + type; otherwise, false.</returns> + <seealso cref="op_Equality(Graphics.Point,Graphics.Point)" /> + <seealso cref="op_Inequality(Graphics.Point,Graphics.Point" /> + </method> + + <method name="ToString"> + <summary>Report a point's location as a string.</summary> + <returns>A string representing a point's location, in the form (x,y), without any + leading, trailing, or embedded whitespace.</returns> + </method> + + <method name="op_Equality(Graphics.Point,Graphics.Point)"> + <summary>This operator determines whether two points have the same location.</summary> + <param name="p1"><c>p1</c> is the first Point to be compared.</param> + <param name="p2"><c>p2</c> is the second Point to be compared.</param> + <returns>True if the points have the same location and they have the exact same + type; otherwise, false.</returns> + <seealso cref="Equals(System.Object)" /> + <seealso cref="op_Inequality(Graphics.Point,Graphics.Point)" /> + </method> + + <method name="op_Inequality(Graphics.Point,Graphics.Point)"> + <summary>This operator determines whether two points have the same location.</summary> + <param name="p1"><c>p1</c> is the first Point to be compared.</param> + <param name="p2"><c>p2</c> is the second Point to be compared.</param> + <returns>True if the points do not have the same location and they have the exact same + type; otherwise, false.</returns> + <seealso cref="Equals(System.Object)" /> + <seealso cref="op_Equality(Graphics.Point,Graphics.Point)" /> + </method> + + <method name="Main"> + <summary> + This is the entry point of the Point class testing program. + </summary> + <remarks> + <para>This program tests each method and operator, and is intended to be run after + any non-trivial maintenance has been performed on the Point class.</para> + </remarks> + </method> + + <!-- properties --> + <property name="X"> + <value>Property <c>X</c> represents the point's x-coordinate.</value> + </property> + + <property name="Y"> + <value>Property <c>y</c> represents the point's y-coordinate.</value> + </property> + </type> +</doc> +</pre> + diff --git a/web/mysql b/web/mysql new file mode 100755 index 00000000000..e45ea0bee0b --- /dev/null +++ b/web/mysql @@ -0,0 +1,270 @@ +* MySQL Data Provider + +<ul> + <li>MySQL Data Provider for + <a href="http://www.mysql.com/">MySQL</a> databases. It is written in C# and uses + the MySQL C Client Library</li> + + <li>Exists in namespace Mono.Data.MySql and assembly Mono.Data.MySql</li> + + <li>Works on Windows and Linux via the MySQL client shared library + (libmySQL.dll on Windows and libmysqlclient.so on Linux).</li> + + <li>Started by Daniel Morgan using + <a href="http://www.cybercom.net/~zbrad/DotNet/MySql/">C# Bindings to MySQL</a> from <a href="mailto:zbrad@cybercom.net">Brad Merill</a> + + <li><a href="http://www.mysql.com/articles/dotnet/">Exploring MySQL in the Microsoft .NET Environment</a> is an article + by Mr. Venu who is a MySQL AB developer.</li> + + <li>There is a good alternative to the provider in Mono: + <ul> + <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> from ByteFX + is a MySQL Managed provider written in 100% C#, + does not require a client library, and works on Microsoft .NET and Mono. You + need at least Mono 0.18 and MySQLNet 0.65 for it to work on Mono.</li> + + </ul> + </li> + <li>Testing for Mono's Mono.Data.MySql and ByteFX's ByteFX.Data.MySQLClient is below...</li> +</ul> + +** Current Status + +<ul> + <li>can connect + + <li>can execute non-queries via ExecuteNonQuery() + + <li>can execute aggregates via ExecuteScalar() and retrieve the + single row/single column result + + <li>can execute queries and retrieve results using a data reader. + + <li>a schema DataTable has been partially + implemented which is returned from GetSchemaTable() in MySqlDataReader. + + <li>a DataTable in a DataSet can be filled via a MySqlDataAdapter + + <li>The shared client libraries + between windows version and linux are different: windows has libmySQL.dll + while linux has libmysqlclient.so. This is handled by the + file etc/mono/config which is mapped by the mono runtime in knowing + which native shared library to load. In cvs, this file is mono/config.in and + can be modified with a text editor. +</ul> + +** Action plan + +The current plan to work on the MySQL data provider: + + <ul> + <li>Parameters support via MySqlParameter and MySqlParameterCollection + + <li>Support LOBs (Large Object) + + <li>Change the MySQL provider to not be dependent on a client library and + be written in 100% C# + + <li>Connection pooling + + <li>Get the provider to work like other data providers + </ul> + +** Testing for Mono's MySQL provider (Mono.Data.MySql) + +<ul> + <li>Have access to a MySQL database or download it from + <ul> + <li><a href="http://www.mysql.com/downloads/index.html">MySQL AB</a></li> + </ul> + </li> + + <li>Take a look at MySqlTest.cs in mcs/class/Mono.Data.MySql/Test</li> + + <li>Has a ConnectionString format: +<pre> + "Server=hostname;" + + "Database=database;" + + "User ID=username;" + + "Password=password" + (or) + "host=hostname;" + + "dbname=database;" + + "user=username;" + + "passwd=password" +</pre> + + <li>C# Example: +<pre> + using System; + using System.Data; + using Mono.Data.MySql; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "Server=localhost;" + + "Database=test;" + + "User ID=mysql;" + + "Password=;"; + IDbConnection dbcon; + dbcon = new MySqlConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + // requires a table to be created named employee + // with columns firstname and lastname + // such as, + // CREATE TABLE employee ( + // firstname varchar(32), + // lastname varchar(32)); + string sql = + "SELECT firstname, lastname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["firstname"]; + string LastName = reader["lastname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs \ + -r System.Data.dll \ + -r Mono.Data.MySql.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll \ + -r Mono.Data.MySql.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> + +</ul> + +** Testing for MySQLNet provider (ByteFX.Data.MySQLClient) + +<ul> + <li>Have access to a MySQL database or download it from + <ul> + <li><a href="http://www.mysql.com/downloads/index.html">MySQL AB</a></li> + </ul> + </li> + + <li>MySQLNet can be gotten from <a href="http://sourceforge.net/projects/mysqlnet/">here</a> and the + binary assembly ByteFX.Data.dll needs to be installed + in the same place as the mono class libraries.</li> + + <li>MySQLNet requires <a href="http://www.icsharpcode.net/OpenSource/SharpZipLib/default.asp">SharpZipLib</a> which is + a Zip Library written in 100% C#. This is used for compression/decompression of data + sent/received over the network. The SharpZipLib binary assembly SharpZipLib.dll should + be installed in the same place as the mono class libraries.</li> + + <li>Has a ConnectionString format: +<pre> +"Server=hostname;" + +"Database=database;" + +"User ID=username;" + +"Password=password" +</pre> + </li> + <li>C# Example: +<pre> + using System; + using System.Data; + using ByteFX.Data.MySQLClient; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "Server=localhost;" + + "Database=test;" + + "User ID=mysql;" + + "Password=;"; + IDbConnection dbcon; + dbcon = new MySQLConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + // requires a table to be created named employee + // with columns firstname and lastname + // such as, + // CREATE TABLE employee ( + // firstname varchar(32), + // lastname varchar(32)); + string sql = + "SELECT firstname, lastname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["firstname"]; + string LastName = reader["lastname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r ByteFX.Data.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r ByteFX.Data.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> + +</ul> + diff --git a/web/odbc b/web/odbc new file mode 100755 index 00000000000..33d25c98193 --- /dev/null +++ b/web/odbc @@ -0,0 +1,175 @@ +* ODBC Data Provider +<ul> + <li>Exists in namespace System.Data.Odbc and assembly System.Data + + <li>Works on Windows and Linux. Should have no problems working on UNIX too. + + <li>Works on Windows via the native Windows odbc32.dll + + <li>Works on Linux via: + + <ul> + <li><a href="http://www.unixodbc.org/">unixODBC</a> which has + commercial support + from <a href="http://www.easysoft.com/">Easysoft</a></li> + + <li><a href="http://www.iodbc.org/">iODBC</a> which has + a commercial support + from <a href="http://oplweb.openlinksw.com:8080/download/">OpenLink Software</a></li> + </ul> + + <li>List of unixODBC <a href="http://www.unixodbc.org/drivers.html">drivers</a> + + <li>List of <a href="http://ourworld.compuserve.com/homepages/Ken_North/odbcvend.htm">ODBC Vendors</a> + + <li>ODBC can connect to various databases which has an ODBC driver installed: + <ul> + <li><a href="http://www.mysql.com/">MySQL</a> + <li><a href="http://www.postgresql.org/">PostgreSQL</a> + <li><a href="http://www.oracle.com/">Oracle</a> + <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a> + <li><a href="http://www.sybase.com/downloads">Sybase</a> and + <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> ( + via <a href="http://www.freetds.org/">FreeTDS</a> on UNIX) + <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a> + <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a> + (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a> on UNIX) + </ul> + + <li>ODBC Provider created by Brian Ritchie.</li> + + <li>Does not support trusted connections</li> +</ul> + +** Current Status + +<ul> + <li>Can Connect on: + <ul> + <li>Windows via native Windows odbc32.dll</a></li> + <li>Linux via: + <ul> + <li>unixODBC's libodbc.so</li> + <li>iODBC's libiodbc.so</li> + </ul> + </li> + </ul> + </li> + + <li>Various databases have been tested using their + ODBC drivers: MySQL, PostgreSQL, Oracle, IBM DB2, and Microsoft SQL Server</li> + + <li>Can execute non-query commands via ExecuteNonQuery of a OdbcCommand</li> + + <li>Can execute aggreates and retrieve a single row single column result via + ExecuteScalar of a OdbcCommand</li> + + <li>Can execute queries via ExecuteReader of a OdbcCommand and + retrieve results using an OdbcDataReader</li> + + <li>Can get a DataTable containing schema info via GetSchemaTable() in a OdbcDataReader</li> + + <li>Can Fill a DataTable in a DataSet via an OdbcDataAdapter</li> +</ul> + +** Action Plan + +<ul> + + <li>Fixing bugs + + <li>Testing with other setups +</ul> + +** Testing ODBC provider + +<p>Test Mono's ODBC provider System.Data.Odbc with the MySQL ODBC driver MyODBC + +<p><ul> + <li>Take a look at OdbcTest.cs in mcs/class/System.Data/Test</li> + + <li>Here is a ConnectionString format if you have a DSN setup: +<pre> +"DSN=dataSetName;UID=username;PWD=password" +</pre> + </li> + <li>Here is a ConnectionString format if you do not have DSN (have not + gotten this to work): +<pre> +"DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=;DATABASE=pubs" +</pre> + </li> + <li>C# Example: +<pre> + using System; + using System.Data; + using System.Data.Odbc; + + public class Test + { + public static void Main(string[] args) + { + // have an ODBC DSN setup named MYSQLDSN + // that accesses a MySQL database via + // MyODBC driver for ODBC with a + // hostname of localhost and database test + string connectionString = + "DSN=MYSQLDSN;" + + "UID=mysql;" + + "PWD=;"; + IDbConnection dbcon; + dbcon = new OdbcConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + // requires a table to be created named employee + // with columns firstname and lastname + // such as, + // CREATE TABLE employee ( + // firstname varchar(32), + // lastname varchar(32)); + string sql = + "SELECT firstname, lastname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["firstname"]; + string LastName = reader["lastname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> + +</ul> diff --git a/web/oledb b/web/oledb new file mode 100755 index 00000000000..a4f80e53d47 --- /dev/null +++ b/web/oledb @@ -0,0 +1,142 @@ +* OLE DB Provider + +<ul> + <li> Provides a OleDb-like provider for Mono + using <a href="http://www.gnome-db.org/">GDA</a> as the data access layer.</li> + + <li> Exists in namespace System.Data.OleDb and assembly System.Data</li> + + <li>Created by Rodrigo Moya</li> + + <li>LibGDA has providers for:</li> + <ul> + <li><a href="http://www.mysql.com/">MySQL</a></li> + <li><a href="http://www.postgresql.org/">PostgreSQL</a></li> + <li>XML</li> + <li>ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>)</li> + <li><a href="http://www.oracle.com/">Oracle</a></li> + <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a></li> + <li><a href="http://www.sybase.com/downloads">Sybase</a> and + <a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> ( + via <a href="http://www.freetds.org/">FreeTDS</a>)</li> + <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a></li> + <li><a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a></li> + <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a></li> + (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>)</li> + </ul> + </li> + + <li>Does not support trusted connections</li> +</ul> + +** Current Status + <ul> + <li>The OleDb provider is working with libgda (an OLE-DB/ADO data access for Unix). + The C-Sharp bindings to libgda currently work - meaning they can compile, run, + and you can connect to a + PostgreSQL database via libgda via the C-Sharp bindings to libgda.</li> + + <li>Basic + functionality (execution of commands, data retrieval, transactions, etc) are + now working.</li> + + <li>An inital implementation of GetSchemaTable() for + the OleDbDataReader has been checked into cvs. GetSchemaTable() isn't correct for OleDb, + but the foundation is there.</li> + </ul> + +** Action Plan + <ul> + <li>Current focus is on filling up the missing pieces (Data adapters + mainly) and schema support.</li> + + <li>We need help building libgda on Windows though. libgda + builds find on linux though.</li> + + <li>Need to make the OleDb provider compatible with the OleDb provider in Microsoft .NET</li> + </ul> + +** Testing OleDb with libgda's PostgreSQL provider + +<ul> + <li>Requires a working mono and mcs</li> + <li>Requires Linux because the OleDb provider uses libgda and libgda only + works on Linux.</li> + <li>Connection String format: "Provider=providerName;...". providerName is the + name of the Provider you use, such as, PostgreSQL, MySQL, etc. The elipsis ... + means that the connection parameters are dependent upon the provider being used and + are passed to libgda for connecting. Such paramters, can be: Database, User ID, Password, + Server, etc...</li> + <li>See the test TestOleDb.cs found at mcs/class/System.Data/System.Data.OleDb</li> + <li>C# Example for Mono's System.Data.OleDb: +<pre> + using System; + using System.Data; + using System.Data.OleDb; + + public class Test + { + public static void Main(string[] args) + { + // there is a libgda PostgreSQL provider + string connectionString = + "Provider=PostgreSQL;" + + "Addr=127.0.0.1;" + + "Database=rodrigo"; + IDbConnection dbcon; + dbcon = new OleDbConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + // requires a table to be created named employee + // with columns firstname and lastname + // such as, + // CREATE TABLE employee ( + // firstname varchar(32), + // lastname varchar(32)); + string sql = + "SELECT firstname, lastname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["firstname"]; + string LastName = reader["lastname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> +</li> + +</ul> + diff --git a/web/oracle b/web/oracle new file mode 100755 index 00000000000..e69f378b1a9 --- /dev/null +++ b/web/oracle @@ -0,0 +1,146 @@ +* Oracle Data Provider + +<ul> + <li>Exists in namespace System.Data.OracleClient and assembly System.Data.OracleClient</li> + + <li>Works on Windows</li> + + <li>Works with Oracle 8i</li> + + <li>More information about Oracle can be found at <a href="http://www.oracle.com/"/>here</a></li> + + <li>Created by Daniel Morgan.</li> + + <li>Does not support trusted connections</li> + +</ul> + +** Current Status + +<ul> + <li>OracleConnection can connect to an Oracle 8i database on + Windows via oci.dll</li> + + <li>The native glue library only has makefiles for Borland C++ and + Microsoft Visual C++ command line compilers. Only the makefile for + Microsoft Visual C++ command-line compiler has been tested.</li> + + <li>Can execute simple DML SQL statements, such as, + INSERT a row into the EMP table via the OracleCommand's ExecuteNonQuery method</li> + + <li>The System.Data.OracleClient.dll assembly can be built with mcs/mono via + the makefile.gnu for System.Data.OracleClient or csc/.net via the + System.Data.OracleClient.build nant build file. There is also a Visual Studio.NET + solution it too. + +</ul> + +** Action Plan + +<ul> + <li>Get the makefile for the Borland C++ compiler to work + since the <a href="http://www.borland.com/">Borland</a> C++ compiler is + a free download</li> + <li>Get the native glue lib System.Data.OracleClient.ocigule.dll to be built + using gcc on Linux. This would require that Oracle 8i client software be installed + on Linux with the oci headers and shared libraries</li> + <li>Be able to retrieve results via a data reader</li> + <li>Parameters support</li> + <li>Stored Procedures, Functions, and Packages support</li> + <li>Be able to fill a DataTable in a DataSet via a data adapter</li> + <li>Support for Oracle 9i</li> + <li>Figure out how to move the unmanaged OCI handling code in + the oci glue C library to the managed C# assembly. I have been unable + to successfully connect to an Oracle 8i database by using Platform Invoke and + Marshalling in C# to the oci shared library (oci.dll on Windows)</li> + +</ul> + +** Testing Mono.Data.OracleClient + +<ul> + <li>Have a working mono and mcs</li> + + <li>Have access to an Oracle 8i database or download it from + <a href="http://www.oracle.com/">Oracle</a>. Registration to the + Oracle Technology Network is free. If installing on Linux, I suggest you + do a lot of searching to see how others installed Oracle on Linux.</li> + + <li>Make sure Mono.Data.OracleClient.dll assembly is built, if not, go + into Mono.Data.OracleClient and do a make -f makefile.gnu (on Linux) or + ../../nant/NAnt.exe (on Cygwin).</li> + + <li>The OCI Glue Library Mono.Data.OracleClient.ociglue.dll will need to be + created as well. Has only been tested with lc (Microsoft Visual C++ command-line compiler). + There is a make file for Microsoft C++ and Borland C++. I'm sure it wouldn't be hard + to create a makefile for gcc if installing on Linux.</li> + + <li>Take a look at TestOracleClient.cs found at mcs/class/System.Data.OracleClient/Test</li> + + <li>Has a connection string format: +<pre> +"Data Source=tnsname;User ID=userid;Password=password" +</pre> + </li> + <li>C# Example: +<pre> + using System; + using System.Data; + using System.Data.OracleClient; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "Data Source=testdb;" + + "User ID=scott;" + + "Password=tiger;"; + IDbConnection dbcon; + dbcon = new OracleConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + string sql = + "insert into scott.emp " + + "(empno, ename, job, sal, deptno) " + + "values(123," + + "'Don Smith'," + + "'Cook'," + + "23021," + + "20)"; + dbcmd.ConnectionString = sql; + dbcmd.ExecuteNonQuery(); + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r System.Data.OracleClient.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r System.Data.OracleClient.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> + +</ul> + diff --git a/web/papers b/web/papers new file mode 100644 index 00000000000..36a31988e83 --- /dev/null +++ b/web/papers @@ -0,0 +1,96 @@ +* JIT Compiler + + <a + href="http://citeseer.nj.nec.com/vitek97efficient.html"> + Efficient Type Inclusion Tests: Jahn Vitek, R. Nigel Horspool, Andres + Krall</a> + + <a + href="http://citeseer.nj.nec.com/cytron91efficiently.html"> + Efficiently Computing Static Single Assignment Form and the Control + Dependence Graph: Ron Cytron, Jeanne Ferrante</a> + + <a + href="http://citeseer.nj.nec.com/193349.html"> + Practical Improvements to the Construction and Destruction of Static Single Assignment Form: Preston Briggs, + Keith Cooper, Timothy Harvey, Taylor Simpson</a> + + <a + href="http://citeseer.nj.nec.com/krall98efficient.html"> + Efficient JavaVM Just-in-Time Compilation: Andreas Krall</a> + + <a + href="http://citeseer.nj.nec.com/452617.html">Java for + Large-Scale Scientific Computations: Andreas Krall, Phillip Thomsich</a> + + <a + href="http://citeseer.nj.nec.com/117522.html"> + Engineering Simple, Efficient Code Generator Generator: Christopher + W. Fraser, David R. Hanson, Todd A. Proebsting</a> + + <a + href="http://citeseer.nj.nec.com/proebsting92code.html"> + Code Generation Techniques: Todd Alan Proebsting</a> + + <a + href="http://citeseer.nj.nec.com/74629.html">Fast, + Effective Code Generation in a Just-In-Time Java Compiler: Ali-Reza + Adl-Tabatabai Guei-Yuan Lueh, Vishesh M. Parikh, James M. Stichnoth...</a> + + <a + href="http://citeseer.nj.nec.com/bodik00abcd.html"> + ABCD: Eliminating Array-Bounds Checks on Demand: Rastislav Bodik, Rajiv Gupta, Vivek Sarkar</a> + +* Register Allocation + + <a + href="http://citeseer.nj.nec.com/poletto99linear.html"> + Linear Scan Register Allocation: Massimiliano Poletto, Vivek Sarkar</a> + + <a + href="http://citeseer.nj.nec.com/traub98quality.html"> + Quality and Speed in Linear-scan Register Allocation: Omri Traub, Glenn + Holloway, Michael D. Smith</a> + +* Loop Transformations + + <a + href="http://citeseer.nj.nec.com/bacon93compiler.html"> + Compiler Transformations for High-Performance Computing: David Bacon</a> + +* Interpreter + + <a + href="http://citeseer.nj.nec.com/470069.html"> + vmgen-A Generator of Efficient Virtual Machine Interpreters: M. Anton + Ertl, David Gregg, Andreas Krall, Bernd Paysan</a> + +* Synchronization + + <a + href="http://citeseer.nj.nec.com/krall98monitors.html"> + Monitors and Exceptions - How to implement Java efficiently: Andreas Krall, + Mark Probst</a> + + <a + href="http://citeseer.nj.nec.com/bacon98thin.html"> + Thin Locks: Featherweight Synchronization for Java: David Bacon</a> + + <a + href="http://citeseer.nj.nec.com/278639.html"> + Featherweight Monitors with Bacon Bits: David Bacon</a> + +* Garbage Collection + + <a + href="http://citeseer.nj.nec.com/wilson92uniprocessor.html"> + Uniprocessor Garbage Collection Techniques: Paul Wilson</a> + + <a + href="http://citeseer.nj.nec.com/41666.html"> + A Language-Independent Garbage Collector Toolkit: Richard Hudson, Eliot Moss, Amer Diwan, Christopher Weight</a> + + <a + href="http://citeseer.nj.nec.com/seligmann95incremental.html"> + Incremental Collection of Mature Objects: Richard Hudson, Eliot Moss</a> + diff --git a/web/passport b/web/passport new file mode 100644 index 00000000000..3ffe0dfeef9 --- /dev/null +++ b/web/passport @@ -0,0 +1,298 @@ +* Updates + + <b>Sep 20, 2001:</b> Microsoft has just announced some changes + to passport that are rather interesting. This document + reflects the Passport system without taking into account the + new changes. + + Read about it <a href="http://www.microsoft.com/presspass/features/2001/sep01/09-20passport.asp">here</a>. + + For an analysis of security problems with passport, check <a + href="http://avirubin.com/passport.html">http://avirubin.com/passport.html</a>. + The bottom line is that you should not put any sensitive + information on passport. + + I have received many comments from people, and I have updated + the page accordingly. From removing incorrect statements, to + fixing typos, to include mentions to other software pieces. + + I also corrected my statement about IIS and a trojan horse, I + should read a more educated press in the future. My apologies + to Microsoft and its employees on this particular topic. IIS + did not have a trojan horse built in. + +* Microsoft Hailstorm and Passport + + Microsoft Passport is a centralized database hosted by + Microsoft that enhances the consumer experience with the Web + by providing a single logon system that they can use across a + number of participant web sites. + + As you might know by now from our extensive <a + href="faq.html">FAQ</a>, the Mono project has nothing to do + with Microsoft Hailstorm or <a + href="http://www.passport.com">Microsoft Passport.</a> + + Still a lot of people have asked us our opinion on them. + +** Passport + + Passport is important not because of it being a breakthrough + technologically speaking, but because the company is in a + position to drive most people toward being suscribers of it. + + At the time of this writing passport is required to use the + free mail service <a href="http://www.hotmail.com">Hotmail</a> + to get customized support for the <a + href="http://www.msn.com">MSN portal</a>, <a + href="http://msdn.microsoft.com">Microsoft Developers + Network</a> and according to the original announcement from + Microsoft <a href="http://www.americanexpress.com">American + Express</a> and <a href="http://www.ebay.com">EBay</a> will be + adopting it. + + There is already a <a + href="http://www.passport.com/Directory/Default.asp?PPDir=C&lc=1033">Large + list</a> of participating sites. + + There are many current users of it and Microsoft will be + driving more users towards Passport as it <a + href="http://news.cnet.com/news/0-1003-200-6343275.html">integrates + it</a> in their upcoming release of Windows. + + Microsoft has also <a + href="http://www.passport.com/Business/JoinPassportNetwork.asp?lc=1033">developed + a toolkit</a> to enable current web merchants to integrate + their services with passport. + + To the end user, there is a clear benefit: they only have to + log into a single network and not remember multiple passwords + across sites on the internet. Companies that adopt passport + will have a competition advantage over those that dont. + Microsoft lists a list of <a + href="http://www.passport.com/Business/Default.asp?lc=1033">benefits</a> + to companies. + + +** The problems of Passport + + There are a number of concerns that different groups have over + Passport. Sometimes I have some, sometimes I do not. But + overall, consumers and businesses can have better solutions. + + <ul> + * <b>Single Point of Failure:</b> As more services and + components depend on remote servers, functionality can + grind to a halt if there is a failure on the + centralized Passport system. + + Such a failure was predicted, and we recently <a + href="http://news.cnet.com/news/0-1005-200-6473003.html">witnessed</a> + got a lot of people worried. + + The outgage lasted for seven days. Think what this + could do to your business. + + * <b>Trust:</b> Not everyone trusts Microsoft to keep + their information confidential. Concerns are not only + at the corporate level policy, but also the fact that + the source code for Microsoft products is not + available, means that trojans or worms could be built + into the products by malicious engineers. + + Various government officials in non-US countries also + have a policy that no state sensitive information can + be held by foreign companies in foreign soil. A natural + matter of national security to some. + + * <b>Security:</b> With a centralized system like + Passport, imagine the repercussions of a malicious + hacker gaining access to the Passport database. + Personal information and credit card information about + almost everyone using a computer could be stored there. + + Hackers have already <a + href="http://slashdot.org/articles/00/10/27/1147248.shtml">broken + into Microsoft</a> in the past. And the company was + unable to figure out for how long their systems had + been hacked. + + Security holes have been found in <a + href="http://slashdot.org/articles/00/04/14/0619206.shtml">IIS + in the past.</a> If all the world's data is stored on + a central location, when a single security hole is + detected, it would allow an intruder to install a + backdoor within seconds into the corporate network + without people ever noticing. + + Microsoft itself has been recently hit by worms, + imagine if all your business depended on a single + provider for providing all or your authentication + needs + </ul> + + Microsoft might or might not realize this. The idea behind + Passport is indeed a good one (I can start to get rid of my + file that keeps track of the 30 logins and passwords or so + that I use across the various services on the net myself). + +** Alternatives to Microsoft Passport + + An alternative to Microsoft Passport needs to take the above + problems into consideration. Any solution of the form `We + will just have a competing offering' will not work. + + The system thus has to be: + + <ul> + * <b>Distributed:</b> The entire authentication + system should not create an internet `blackout' in the + case of failure. + + A distributed system using different software + platforms and different vendors would be more + resistent to an attack, as holes in a particular + implementation of the server software would not affect + every person at the same time. + + A security hole attack might not even be relevant to + other software vendors software. + + * <b>Allow for multiple registrars:</b> Users should + be able to choose a registrar (their banks, local + phone company, service provider, Swiss bank, or any + other entity they trust. + + * <b>Mandate good security measures:</b> As a + principle, only Open Source software should be used + for servers in the registrar, and they should conform + to a standard set of tools and software that can be + examined by third parties. + </ul> + + An implementation of this protocol could use the DNS or a + DNS-like setup to distribute the information of users with the + possibility of replicating and caching public information + about the user. + + For instant messaging (another piece of the Hailstorm bit), + you want to use a non-centralized system like Sun's <a + href="http://www.jxta.org">JXTA</a>. Some people mailed me to + mention Jabber as a messaging platform and other people + pointed out to the <a + href="http://java.sun.com/products/jms/">Java Message + Service</a>. The JMS does support a number of very + interesting features that are worth researching. + + It could also just use the user e-mail address as the `key' to + choose the registrar (msn.com, hotmail.com -> passport.com; + aol.com -> aol.passport.com; you get the idea). + + The <a + href="http://www.soapware.org/xmlStorageSystem">xmlStorage</a> + idea from <a href="http://www.scripting.com">Dave Winer</a> + could be used to store the information. + + A toolkit for various popular web servers could be provided, + authenticated and should be open sourced (for those of you who + think that a binary program would give more security and would + prevent people from tampering: you are wrong. You can always + use a proxy system that "behaves" like the binary, and passes + information back and forth from the real program, and snoops + in-transit information). + + Good cryptographers need to be involved in this problem to + figure out the details and the possible insecure pieces of a + proposal like this. + +** Implementation: In short + + To keep it short: <b>DNS, JXTA, xmlStorage.</b> + + +** Deploying it + + The implementation of such a system should be a pretty + straightforward task once security cryptographers have + designed such a beast. + + The major problems are: + + <ul> + * <b>People might just not care:</b> In a poll to US + citizens a couple of decades ago, it was found that + most people did not care about the rights they were + given by the Bill of Rights, which lead to a number of + laws to be passed in the US that eliminated most of + the rights people had. + + * <b>The industry will move way too slow:</b> + Microsoft's implementation is out in the open now: it + is being deployed, and soon it will be insinuated to + many, many users. The industry needs to get together + soon if they care about this issue. + + By the time the industry reacts, it might be too + late. + </ul> + +** Passport and Mono + + The .NET class libraries include a Passport class that + applications might use to authenticate with Passport. Since + we do not have information at this point on the exact protocol + of Passport, it is not even feasible to implement it. + + If at some point the information is disclosed, it could be + implemented. + + If a competing system to Passport existed, we could probably + hide all the authentication information to use a number of + different passport-like systems. + + If a user does not want to use Passport at all, he could + always turn it off (or completely remove the class from the + library). After all, this is free software. + + Currently, we are too far from the point where this is a real + issue. + +** Passport and endangering Open Source. + + A few people have said: `Mono will allow Passport to be + available for Linux and that is bad'. This is plain + misinformation. + + Currently, you can obtain Passport for Linux from Microsoft + itself and deploy it today on your Web server. Mono does not + even enter the picture here. Go to passport.com and download + the toolkit and you will see with your own eyes that passport + is <B>already</b> available for Linux. + +** Disclaimer + + This is just a group of personal thoughts of mine that I have + placed here because I get asked this question a lot lately. + The views of this page are not a statement from my employer + (Ximian, Inc). + + This is not part of Mono. We are not trying to deal with this + problem. + + Nat Friedman (Ximian's co-founder) has his own ideas on how a + competing system to Passport could be designed, but I will let + <a href="http://www.nat.org/">him</a> post his own story. + +** Other Passport Comments + + An interesting study on the security of passport is available at: <a + href="http://avirubin.com/passport.html">http://avirubin.com/passport.html</a> + +** Other Alternatives + + Some people have pointed out <a + href="http://www.xns.org">XNS</a> + +Send comments to me: Miguel de Icaza (<a + href="mailto:miguel@ximian.com">miguel@ximian.com</a>) + diff --git a/web/pending b/web/pending new file mode 100644 index 00000000000..e243a10dedf --- /dev/null +++ b/web/pending @@ -0,0 +1,14 @@ +** Microsoft and GNU and Linux. + +Q: Does this mean that Microsoft is better than Linux? + +A: Many of us are working on <a + href="http://www.gnu.org/philosophy/free-sw.html">free software<a> + and want to have an <a href="http://www.opensource.org">open + source</a> environment that we can change, modify, improve, learn + from, and share with others. Some of us also think that this will + lead on the long run to better software: more efficient, faster, + more robust and more. + + We are willing to take good ideas from any source they come from. + diff --git a/web/pending-classes.in b/web/pending-classes.in new file mode 100644 index 00000000000..1cdb5a4cb36 --- /dev/null +++ b/web/pending-classes.in @@ -0,0 +1,246 @@ +System.Object +System.Exception +System.ValueType +System.Delegate +System.MulticastDelegate +System.Enum +System.Activator +System.ArgIterator +System.__ComObject +System.TypedReference +System.Security.AllowPartiallyTrustedCallersAttribute +System.Runtime.Serialization.Formatter +System.Runtime.Serialization.FormatterConverter +System.Runtime.Serialization.FormatterServices +System.Runtime.Serialization.ObjectIDGenerator +System.Runtime.Serialization.ObjectManager +System.Reflection.ModuleResolveEventHandler +System.Reflection.Pointer +System.Globalization.CompareInfo +System.Globalization.HebrewCalendar +System.Globalization.HijriCalendar +System.Globalization.JapaneseCalendar +System.Globalization.KoreanCalendar +System.Globalization.SortKey +System.Globalization.StringInfo +System.Globalization.TaiwanCalendar +System.Globalization.TextElementEnumerator +System.Globalization.TextInfo +System.Globalization.ThaiBuddhistCalendar +System.IO.IsolatedStorage.IsolatedStorageFile +System.Reflection.Emit.MethodRental +System.Runtime.CompilerServices.AccessedThroughPropertyAttribute +System.Runtime.CompilerServices.CallConvCdecl +System.Runtime.CompilerServices.CallConvStdcall +System.Runtime.CompilerServices.CallConvThiscall +System.Runtime.CompilerServices.CallConvFastcall +System.Runtime.CompilerServices.CustomConstantAttribute +System.Runtime.CompilerServices.DateTimeConstantAttribute +System.Runtime.CompilerServices.DiscardableAttribute +System.Runtime.CompilerServices.DecimalConstantAttribute +System.Runtime.CompilerServices.CompilationRelaxationsAttribute +System.Runtime.CompilerServices.CompilerGlobalScopeAttribute +System.Runtime.CompilerServices.IDispatchConstantAttribute +System.Runtime.CompilerServices.IsVolatile +System.Runtime.CompilerServices.IUnknownConstantAttribute +System.Runtime.CompilerServices.RequiredAttributeAttribute +System.Runtime.InteropServices.ArrayWithOffset +System.Runtime.InteropServices.DispIdAttribute +System.Runtime.InteropServices.ClassInterfaceType +System.Runtime.InteropServices.ClassInterfaceAttribute +System.Runtime.InteropServices.ComVisibleAttribute +System.Runtime.InteropServices.LCIDConversionAttribute +System.Runtime.InteropServices.ComRegisterFunctionAttribute +System.Runtime.InteropServices.ComUnregisterFunctionAttribute +System.Runtime.InteropServices.ProgIdAttribute +System.Runtime.InteropServices.ImportedFromTypeLibAttribute +System.Runtime.InteropServices.IDispatchImplType +System.Runtime.InteropServices.IDispatchImplAttribute +System.Runtime.InteropServices.ComSourceInterfacesAttribute +System.Runtime.InteropServices.ComConversionLossAttribute +System.Runtime.InteropServices.TypeLibTypeFlags +System.Runtime.InteropServices.TypeLibFuncFlags +System.Runtime.InteropServices.TypeLibVarFlags +System.Runtime.InteropServices.TypeLibTypeAttribute +System.Runtime.InteropServices.TypeLibFuncAttribute +System.Runtime.InteropServices.TypeLibVarAttribute +System.Runtime.InteropServices.ComImportAttribute +System.Runtime.InteropServices.PreserveSigAttribute +System.Runtime.InteropServices.ComAliasNameAttribute +System.Runtime.InteropServices.AutomationProxyAttribute +System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute +System.Runtime.InteropServices.CoClassAttribute +System.Runtime.InteropServices.ComEventInterfaceAttribute +System.Runtime.InteropServices.COMException +System.Runtime.InteropServices.ComMemberType +System.Runtime.InteropServices.CurrencyWrapper +System.Runtime.InteropServices.DispatchWrapper +System.Runtime.InteropServices.ErrorWrapper +System.Runtime.InteropServices.ExtensibleClassFactory +System.Runtime.InteropServices.HandleRef +System.Runtime.InteropServices.InvalidComObjectException +System.Runtime.InteropServices.InvalidOleVariantTypeException +System.Runtime.InteropServices.TypeLibImporterFlags +System.Runtime.InteropServices.ExporterEventKind +System.Runtime.InteropServices.ITypeLibExporterNotifySink +System.Runtime.InteropServices.ITypeLibConverter +System.Runtime.InteropServices.MarshalDirectiveException +System.Runtime.InteropServices.ObjectCreationDelegate +System.Runtime.InteropServices.RuntimeEnvironment +System.Runtime.InteropServices.RegistrationServices +System.Runtime.InteropServices.SafeArrayRankMismatchException +System.Runtime.InteropServices.SafeArrayTypeMismatchException +System.Runtime.InteropServices.SEHException +System.Runtime.InteropServices.TypeLibConverter +System.Runtime.InteropServices.BIND_OPTS +System.Runtime.InteropServices.UCOMIBindCtx +System.Runtime.InteropServices.UCOMIConnectionPointContainer +System.Runtime.InteropServices.UCOMIConnectionPoint +System.Runtime.InteropServices.UCOMIEnumMoniker +System.Runtime.InteropServices.CONNECTDATA +System.Runtime.InteropServices.UCOMIEnumConnections +System.Runtime.InteropServices.UCOMIEnumConnectionPoints +System.Runtime.InteropServices.UCOMIEnumString +System.Runtime.InteropServices.UCOMIEnumVARIANT +System.Runtime.InteropServices.FILETIME +System.Runtime.InteropServices.UCOMIMoniker +System.Runtime.InteropServices.UCOMIPersistFile +System.Runtime.InteropServices.UCOMIRunningObjectTable +System.Runtime.InteropServices.STATSTG +System.Runtime.InteropServices.UCOMIStream +System.Runtime.InteropServices.DESCKIND +System.Runtime.InteropServices.BINDPTR +System.Runtime.InteropServices.UCOMITypeComp +System.Runtime.InteropServices.TYPEKIND +System.Runtime.InteropServices.TYPEFLAGS +System.Runtime.InteropServices.IMPLTYPEFLAGS +System.Runtime.InteropServices.TYPEATTR +System.Runtime.InteropServices.FUNCDESC +System.Runtime.InteropServices.IDLFLAG +System.Runtime.InteropServices.IDLDESC +System.Runtime.InteropServices.PARAMFLAG +System.Runtime.InteropServices.PARAMDESC +System.Runtime.InteropServices.TYPEDESC +System.Runtime.InteropServices.ELEMDESC +System.Runtime.InteropServices.VARDESC +System.Runtime.InteropServices.DISPPARAMS +System.Runtime.InteropServices.EXCEPINFO +System.Runtime.InteropServices.FUNCKIND +System.Runtime.InteropServices.INVOKEKIND +System.Runtime.InteropServices.CALLCONV +System.Runtime.InteropServices.FUNCFLAGS +System.Runtime.InteropServices.VARFLAGS +System.Runtime.InteropServices.UCOMITypeInfo +System.Runtime.InteropServices.SYSKIND +System.Runtime.InteropServices.LIBFLAGS +System.Runtime.InteropServices.TYPELIBATTR +System.Runtime.InteropServices.UCOMITypeLib +System.Runtime.InteropServices.UnknownWrapper +System.Runtime.Remoting.IObjectHandle +System.Runtime.Remoting.IRemotingTypeInfo +System.Runtime.Remoting.IChannelInfo +System.Runtime.Remoting.IEnvoyInfo +System.Runtime.Remoting.RemotingConfiguration +System.Runtime.Remoting.TypeEntry +System.Runtime.Remoting.ActivatedClientTypeEntry +System.Runtime.Remoting.ActivatedServiceTypeEntry +System.Runtime.Remoting.WellKnownClientTypeEntry +System.Runtime.Remoting.WellKnownServiceTypeEntry +System.Runtime.Remoting.RemotingException +System.Runtime.Remoting.ServerException +System.Runtime.Remoting.RemotingTimeoutException +System.Runtime.Remoting.RemotingServices +System.Runtime.Remoting.InternalRemotingServices +System.Runtime.Remoting.SoapServices +System.Runtime.Remoting.Activation.UrlAttribute +System.Runtime.Remoting.Messaging.IMessageSink +System.Runtime.Remoting.Messaging.AsyncResult +System.Runtime.Remoting.Messaging.CallContext +System.Runtime.Remoting.Messaging.ILogicalThreadAffinative +System.Runtime.Remoting.Messaging.InternalMessageWrapper +System.Runtime.Remoting.Messaging.IMethodCallMessage +System.Runtime.Remoting.Messaging.MethodCallMessageWrapper +System.Runtime.Remoting.Messaging.HeaderHandler +System.Runtime.Remoting.Messaging.IMessageCtrl +System.Runtime.Remoting.Messaging.IRemotingFormatter +System.Runtime.Remoting.Messaging.ReturnMessage +System.Runtime.Remoting.Messaging.MethodCall +System.Runtime.Remoting.Messaging.ConstructionCall +System.Runtime.Remoting.Messaging.MethodResponse +System.Runtime.Remoting.Messaging.ConstructionResponse +System.Runtime.Remoting.Messaging.MethodReturnMessageWrapper +System.Runtime.Remoting.Messaging.OneWayAttribute +System.Runtime.Remoting.Messaging.MessageSurrogateFilter +System.Runtime.Remoting.Messaging.RemotingSurrogateSelector +System.Runtime.Remoting.Contexts.CrossContextDelegate +System.Runtime.Remoting.Contexts.ContextProperty +System.Runtime.Remoting.Contexts.IContextPropertyActivator +System.Runtime.Remoting.Contexts.IContributeClientContextSink +System.Runtime.Remoting.Contexts.IContributeDynamicSink +System.Runtime.Remoting.Contexts.IContributeEnvoySink +System.Runtime.Remoting.Contexts.IContributeObjectSink +System.Runtime.Remoting.Contexts.IContributeServerContextSink +System.Runtime.Serialization.Formatters.InternalRM +System.Runtime.Serialization.Formatters.InternalST +System.Runtime.Serialization.Formatters.SoapMessage +System.Runtime.Serialization.Formatters.SoapFault +System.Runtime.Serialization.Formatters.ServerFault +System.Runtime.Serialization.Formatters.Binary.BinaryFormatter +System.Security.Cryptography.CryptoConfig +System.Security.Cryptography.KeyedHashAlgorithm +System.Security.Cryptography.HMACSHA1 +System.Security.Cryptography.MACTripleDES +System.Security.Cryptography.MaskGenerationMethod +System.Security.Cryptography.PasswordDeriveBytes +System.Security.Cryptography.PKCS1MaskGenerationMethod +System.Security.Cryptography.RC2 +System.Security.Cryptography.RC2CryptoServiceProvider +System.Security.Cryptography.RSACryptoServiceProvider +System.Security.Cryptography.RSAOAEPKeyExchangeDeformatter +System.Security.Cryptography.RSAOAEPKeyExchangeFormatter +System.Security.Cryptography.RSAPKCS1KeyExchangeDeformatter +System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter +System.Security.Cryptography.RSAPKCS1SignatureDeformatter +System.Security.Cryptography.RSAPKCS1SignatureFormatter +System.Security.Cryptography.SHA1Managed +System.Security.Cryptography.TripleDES +System.Security.Cryptography.TripleDESCryptoServiceProvider +System.Security.Permissions.EnvironmentPermission +System.Security.Permissions.FileDialogPermission +System.Security.Permissions.IsolatedStorageFilePermission +System.Security.Permissions.PrincipalPermissionAttribute +System.Security.Permissions.SecurityPermissionAttribute +System.Security.Permissions.PublisherIdentityPermissionAttribute +System.Security.Permissions.PublisherIdentityPermission +System.Security.Permissions.ReflectionPermission +System.Security.Permissions.RegistryPermission +System.Security.Permissions.PrincipalPermission +System.Security.Permissions.SiteIdentityPermission +System.Security.Permissions.StrongNameIdentityPermission +System.Security.Permissions.StrongNamePublicKeyBlob +System.Security.Permissions.UIPermission +System.Security.Permissions.UrlIdentityPermission +System.Security.Permissions.ZoneIdentityPermission +System.Security.Policy.ApplicationDirectory +System.Security.Policy.ApplicationDirectoryMembershipCondition +System.Security.Policy.FirstMatchCodeGroup +System.Security.Policy.Hash +System.Security.Policy.HashMembershipCondition +System.Security.Policy.NetCodeGroup +System.Security.Policy.PermissionRequestEvidence +System.Security.Policy.Publisher +System.Security.Policy.PublisherMembershipCondition +System.Security.Policy.Site +System.Security.Policy.SiteMembershipCondition +System.Security.Policy.StrongName +System.Security.Policy.StrongNameMembershipCondition +System.Security.Policy.UnionCodeGroup +System.Security.Policy.Url +System.Security.Policy.UrlMembershipCondition +System.Security.Policy.Zone +System.Security.Policy.ZoneMembershipCondition +System.Security.Principal.WindowsIdentity +System.Security.Principal.WindowsImpersonationContext +System.Security.Principal.WindowsPrincipal +System.Threading.CompressedStack +
diff --git a/web/plans b/web/plans new file mode 100755 index 00000000000..db6f6dde7c8 --- /dev/null +++ b/web/plans @@ -0,0 +1,15 @@ +* Plans + + Here we are tracking some plans to particular pieces of + technology that are part of Mono. + + This is just a repository of information that is handy for + contributors. + + Currently you can read our plans for <a + href="ado-net.html">ADO.NET</a>, <a + href="asp-net">ASP.NET</a>, <a href="java.html">Java</a> and + <a href="winforms.html">WinForms</a>. + + + diff --git a/web/porting b/web/porting new file mode 100644 index 00000000000..a09ab69deaa --- /dev/null +++ b/web/porting @@ -0,0 +1,63 @@ +* How to port Mono to your preferred architecture + +** Endian, 64 bits and unaligned access issues + + The first thing to do is to check that the metadata handling + library works on your target processor. You may use the disassembler + on simple programs and check that you get sensible results + (assuming it compiles at all on your system:-). + + The main issue is to write macros that read unaligned + little endian shorts/ints/longs/float/doubles: look into + mono/metadata/endian.h. There may be other spots in the code that are + unsafe at reading/writing to some datatypes that require special + alignment, but there should be few such issues and they need to be fixed. + + Once this stuff is sorted out, you should be able to run the interpreter + on simple programs that don't require delegates, P/Invoke functions etc.. + +** Generating assembly bytecodes for the target processor + + Next, you need to provide the support code for generating assembly bytecode + for your target platform (in mono/arch/{ppc,sparc,alpha,*}). + The code should be more or less like the code in x86-codegen.h: + macros that produce fast in-line code. You don't need to provide + code to create every possible code, at first, just the code to + create trampolines and execute them is fine (you'll need to research + how the call convention works on your platform): that would be, for + example, the prolog and epilog code in a function, code to pass function + parameters and deal with the return value and so on. + + libffi in gcc or the xptcall sources in mozilla may be helpful to + understand how the calling convention works, if you can't find a specification. + You'd need a processor manual to know how to create the assembly binary data. + This requires a lot of reading if you're not familiar with the assembly for your + target platform. Manuals for many processors are available as PDF files on the + web site of the respective vendors. Note that some processors require you to + flush the I-cache before executing the code: have a look at how the same thing is + done in GNU lightning. + +** Getting the interpreter to work + + Once you can generate binary code, you can start working on a + mono_create_trampoline() function for your platform: this function will receive + a MonoMethod that describes the arguments and the return type of a C function + and will create the code to call such function. When this function is complete + you'll be able to run more sample programs, that use System.IO, P/Invoke + functions etc. + + To support delegates you'll need to write a mono_create_method_pointer() + function that creates a native function: this can be used to call the + method using the runtime's calling convention (it's basically the reverse + of mono_create_trampoline()). + +** The final step: porting the JIT + + At this point you'd need to have a more complete code generation header file + and you can start writing the machine description file for the monoburg + system. This code (jit/tesjit.c) will require some machine specific tweaks, + but hopefully all you have to do is create the grammar that emit assembly + code from the IR tree. Work is at the early stages also for x86 on this stuff + as we are still testing various solutions: you'd want to read about burg-like + code-generator generators (the LCC book is a good starting point). + diff --git a/web/postgresql b/web/postgresql new file mode 100644 index 00000000000..2bd0b74d09f --- /dev/null +++ b/web/postgresql @@ -0,0 +1,492 @@ +* PostgreSQL Data Provider + +<ul> + <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql</li> + + <li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a> + client/server database management system.</li> + + <li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows + and libpq.so on Linux.</li> + + <li>Alternative to the PostgreSQL provider in Mono: + <ul> + <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> + is a Managed PostgreSQL provider written in 100% C#, does not require a client library, + and works on Microsoft .NET and Mono. + </li> + </ul> + </li> + + <li>See Testing for both Mono's Mono.Data.PostgreSqlClient and Npgsql.</li> +</ul> + +** Current Status + +<ul> + <li>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and + DELETE SQL commands using the ExecuteNonQuery method in PgSqlCommand. + + <li>We can execute multiple queries and do a NextResult() in PgSqlDataReader() + to get the next result set. + + <li>We are also able to do simple aggregate functions, + ie, count(), sum(), min(), and max() + in a simple SELECT SQL query using the ExecuteScalar() now. + + <li>We are also able to retrieve data with a simple SELECT SQL query + using ExecuteReader() which returns a PgSqlDataReader. We are able to + use GetSchemaTable() to get the meta data about the table columns. + We are able to Read() to get each row from the result set. + + <li>We are able to get + String data (char, character, text, varchar), Int16 (smallint), + Int32 (integer), Int64 (bigint), DateTime (time, date, timestamp), + Boolean (boolean), Single (float), and Double (double). + More data types will come later. Note, the types that do work still + need thorough testing. + + <li>Rows that are returned which contain columns that are NULL are handled now. + The PgSqlDataReader method IsDBNull() needs to be called to determine + if a field IS NULL before trying to read data from that field. + + <li>Calling PostgreSQL stored procedures works. It does not work perfectly. + It may not + even work to specification - yet. If you want to test it yourself, look at + TestSqlDataReader.cs or PostgresTest.cs in + mcs/class/System.Data/Test. + + <li>Below, I have some sample code you can + use to call a PostgreSQL stored procedure named "version". This stored + procedure returns a string containing the PostgreSQL server version. Notice + the CommandType is StoredProcedure and the method ExecuteScalar() is called. + + <li>ExecuteScalar() is a lightweight method in class PgSqlCommand that only returns + one row and one column as one object - even if there is more than row or column. + + <li>We have the beginnings of Parameters support PostgreSQL. Only + Input Parameters are currently supported. Output, Input/Output, + and Return parameters still need to be done. + + <li>A lot of functionality in System.Data is missing, but the + infrastructure is starting to come together. + + <li>A lot of Exceptions need to be thrown for various exceptions. However, + PgSqlException, PgSqlErrorCollection, and PgSqlError have been partially + implemented. + + <li>Tim Coleman and Rodrigo Moya got the beginnings of the + PgSqlDataAdapter/DataSet/DataTable/DataRow to work. Currently, + the PgSqlDataAdapter can Fill() relational data into a DataTable in a DataSet. + See the test mcs/class/System.Data/Test/TestSqlDataAdapter.cs to see it in action. +</ul> + +** Action Plan + + <p>More testing and fixing bugs... + + <p>Eventually replace the PostgreSQL data provider in Mono + with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>. + Npgsql is a .Net Data Provider for PostgreSQL which implements + the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>. + Npgsql is implemented in 100% C#. This provider was created by Francisco Figueiredo jr. + and has many programmers developing the provider. + +** Testing Mono's Mono.Data.PostgreSqlClient + + <ul> + * <p>In order to test Mono.Data.PostgreSqlClient, you will need to have + access to a remote PostgreSQL DBMS, or you will have to install + one locally. PostgreSQL was the first ADO.NET provider created in Mono. + + <p>Why use PostgreSQL? Because it is free software, has a client + library that is easy to use, PostgreSQL is easy to install on + Unix and Windows (using the Cygwin install program), not difficult to setup after + installation, and it runs under: Linux, + Windows (via cygwin and ipc-daemon), Unix, and + others. This allowed us to create the + System.Data functionality in Mono much quicker. + + <p>If you plan on using a remote PostgreSQL DBMS Server, + than you will need to have the PostgreSQL client software on your + local computer that includes libpq.so (pq.dll on Windows). + + <p>The System.Data tests use this connection string to connect + to the PostgreSQL database named "test" at host "localhost" as + user "postgres". + +<pre> +"Server=localhost;Database=test;User ID=postgres;Password=fun2db" + (or) +"host=localhost;dbname=test;user=postgres;password=fun2db" +</pre> +</ul> + + <p>Installation instructions for PostgreSQL DBMS: + + <b>On Unix</b> + + <ul> + * Read the PostgreSQL Installation Instructions + at \usr\doc\postgresql-x.x.x\html\installation.html + + * Depending on your Unix system, + PostgreSQL maybe already installed, a database user 'postgres' created, + a linux user 'postgres' created and initdb ran. Or maybe not. + +<pre> + su + adduser postgres + mkdir /usr/local/pgsql/data + chown postgres /usr/local/pgsql/data + su - postgres + initdb -D /usr/local/pgsql/data + postmaster -i -D /usr/local/pgsql/data + createdb test + psql test +</pre> + + * Make sure you have a database user named postgres. It is best to install + the PostgreSQL DBMS under linux user postgres. When you run the postmaster, + run it under the user postgres as well. If this was not done, then you + will need to create a user named postgres for the System.Data tests. + + * If you already installed PostgeSQL and you do not have a database + user named postgres, then you can create user postgres using psql: + +<pre> +psql test +create user postgres with password 'fun2db'; +</pre> + + * The postmaster must be run with -i option. + + * In the /usr/local/pgsql/data/pg_hba.conf file, you need + to have the AUTH_TYPE set to md5. You can read more on this at + /usr/doc/postgresql-7.2.1/html/client-authentication.html + or wherever your + PostgreSQL html docs are located. See the 2nd line below, + host 127.0.0.1 has an AUTH_TYPE md5 in pg_hba.conf. + +<pre> + # TYPE DATABASE IP_ADDRESS MASK AUTH_TYPE + + local all trust + host all 127.0.0.1 255.255.255.255 md5 +</pre> + + * If you can not find your PostgreSQL documentation locally or you + did not install it, then you + can get it <a href="http://www.postgresql.org/idocs/">here</a>. + + </ul> + + <b>On Windows</b> + + <ul> + * Use the <a href="http://www.cygwin.com/">Cygwin</a> installer to + install the PostgreSQL DBMS. It is + found in the database category. + + * <p>Read the file postgres-x.x.README at /usr/doc/Cygwin and read + the requirements to install PostgreSQL. Those requirements + are included with cygwin except cygipc. A default installtion + of cygwin does not install everything you will need, so on the + safe side, just include everything when installing cygwin. + + * <p>The -x.x in postgres-x.x is the version of your PostgreSQL DBMS. + + * <p>Once Cygwin has installed the PostgreSQL DBMS on your computer, + read the file FAQ_MSWIN which is available + in /usr/doc/postgres-x.x + + * <p>Important notes from this file are: + + <ul> + <p><b>2.</b> - Install the latest <a href="http://www.neuro.gatech.edu/users/cwilson/cygutils/cygipc/index.html">CygIPC</a> package. + Cygwin includes a utility bunzip2 which can be used to unzip it. Now, change to + the root directory by + typing "cd /" then + you can use "tar xvf cygipc.xxx.tar" to untar it + in the root directory in cygwin. + + <p>The cygipc package contains the support to run ipc-daemon + that you will need + to run before you can + run the PostgreSQL DBMS Server daemon (postmaster) or run + initdb which initializes the PostgreSQL database. + + <p><b>3.</b> The Cygwin bin directory has to be placed in + the path before the Windows program directories, + for example, C:\cygwin\bin + + <p><b>My own note.</b> In the Windows control panel, I set + the environment variables PATH to my cygwin /usr/local/bin, + /usr/bin, and /bin. I also set my LD_LIBRARY_PATH to + /usr/local/lib and /usr/lib. For example: + + <p> +<pre> +PATH=c:\cygwin\usr\local\bin;c:\cygwin\usr\bin;c:\cygwin\bin; +LD_LIBRARY_PATH=c:\cygwin\usr\local\lib;c:\cygwin\usr\lib; +</pre> + + <p><b>4.</b> Start the ipc-daemon that came with the cygipc + package. There + are two ways to do this: run it from the command line as: + + <p> +<pre> +ipc-daemon & +</pre> + <p>or you can set it up as a Windows service. See the + file cygrunsrv.README at /usr/doc/Cygwin on how to do this + for ipc-daemon and postmaster. Note the + troubleshooting section at the end of + the cygrunsrv.README file. + + <p>To install ipc-daemon as a service, + you just have to run + + <p> +<pre> +ipc-daemon --install-as-service' (--remove-as-service) +</pre> + + <p>and then run + +<pre> +net start ipc-daemon +</pre> + </ul> + + <p>Read the installation.html file + at /usr/doc/postgresql-x.x/html/installation.html + + <p>You will see in this file that you will need to + run the following commands: + + <p> +<pre> +mkdir /usr/local/pgsql/data +initdb -D /usr/local/pgsql/data +postmaster -D /usr/local/pgsql/data +createdb test +psql test +</pre> + + <p>When you need to connect to the database, + you will need ipc-daemon and postmaster running. Start ipc-daemon + before any of the command above. If you restart your computer, you + need to start ipc-daemon and postmaster either manually or as a + service. + + <p>psql is a command-line PostgreSQL client tool to + enter and run SQL commands and queries. + + <p>If there is no database user named postgres, create a user named + postgres with the following SQL command in the client tool psql: + + <p> +<pre> +psql test +create user postgres with password 'fun2db'; +</pre> + <p>The only reason I say this is so you can easily use the System.Data tests + without having to change the database, userid, etc. + </ul> + + <p>In the path mcs/class/System.Data/Test + there is a test for Mono.Data.PostgreSqlClient named + PostgreTest.cs. Thanks goes to Gonzalo for creating the original + PostgreSQL test. + + <p> + To compile the PostgresTest.cs program, do: + + <p> +<pre> + mcs PostgresTest.cs \ + -r System.Data.dll \ + -r Mono.Data.PostgreSqlClient.dll +</pre> + + <p>If there are compile errors, such as, can not convert IDbConnection + to PgSqlConnection, then you need to run mcs like: + +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + PostgresTest.cs \ + -r System.Data.dll \ + -r Mono.Data.PostgreSqlClient.dll +</pre> + + <p> + To run using mint, do: + + <p> +<pre> +mint PostgresTest.exe +</pre> + + <p> + To run using mono, do: +<pre> +mono PostgresTest.exe +</pre> + + <p>C# Example for Mono.Data.PostgreSqlClient: +<pre> + using System; + using System.Data; + using Mono.Data.PostgreSqlClient; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "Server=localhost;" + + "Database=test;" + + "User ID=postgres;" + + "Password=fun2db;"; + IDbConnection dbcon; + dbcon = new PgConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + // requires a table to be created named employee + // with columns firstname and lastname + // such as, + // CREATE TABLE employee ( + // firstname varchar(32), + // lastname varchar(32)); + string sql = + "SELECT firstname, lastname" + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["firstname"]; + string LastName = reader["lastname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r Mono.Data.PostgreSqlClient.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r Mono.Data.PostgreSqlClient.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> +</li> +</ul> + +** Testing Npgsql + +<ul> + <li>Have a working mono and mcs</li> + + <li>Get <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> + and make sure the binary assembly Npgsql.dll is installed in the same place that the + mono class libraries are located. + + <li>Read the Testing notes for Mono.Data.PostgreSqlClient too + + <li>C# Example for Npgsql: +<pre> + using System; + using System.Data; + using Npgsql; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "Server=localhost;" + + "Database=test;" + + "User ID=postgres;" + + "Password=fun2db;"; + IDbConnection dbcon; + dbcon = new NpgsqlConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + // requires a table to be created named employee + // with columns firstname and lastname + // such as, + // CREATE TABLE employee ( + // firstname varchar(32), + // lastname varchar(32)); + string sql = + "SELECT firstname, lastname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["firstname"]; + string LastName = reader["lastname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r Npgsql.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r Npgsql.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> +</li> +</ul> + diff --git a/web/ppc b/web/ppc new file mode 100644 index 00000000000..56026d4d6b1 --- /dev/null +++ b/web/ppc @@ -0,0 +1,33 @@ + +* Mono PowerPC Port + +** Status + + It passes and compiles the same amount of mono tests as on the x86 architecture. + + mcs is self hosting on Linux/PPC. + +*** Interpreter + + Up to date. + +*** Jitter + + Start the port + +** Documentation + +*** PowerPC architecture: + + <A HREF="http://e-www.motorola.com/brdata/PDFDB/docs/MPCFPE32B.pdf">PowerPC Programming environments manual</A><BR> + <A HREF="http://e-www.motorola.com/brdata/PDFDB/docs/MPC7410UM.pdf">G4 (7410) User's manual</A> + + There's a very nice introduction to PowerPC assembly language + at <a + href="http://www-106.ibm.com/developerworks/library/l-ppc/">http://www-106.ibm.com/developerworks/library/l-ppc/</a>. + +*** Calling conventions: + + <a href="http://www.esofta.com/softspecs.html">The PowerPC SystemV ABI specification</a> + + diff --git a/web/projects b/web/projects new file mode 100755 index 00000000000..47df1e71098 --- /dev/null +++ b/web/projects @@ -0,0 +1,24 @@ +* Open Projects + + The .NET framework is a good first in terms of a new + development foundation, but it falls short of providing + higher-level components or building blocks for people to + reuse. + + A few ideas of projects and classes that would be useful to + develop applications follows: + +** EOG component + +** XmlStorageSystem component + +* Gtk# related projects + + Gnome Canvas Bindings. + + Bezier Canvas Item Binding. + +* Graphical bindings + + Binding for the Libart library + diff --git a/web/rationale b/web/rationale new file mode 100644 index 00000000000..d63cf225a59 --- /dev/null +++ b/web/rationale @@ -0,0 +1,173 @@ + +* The Mono Project + +** Background. + + The GNOME project goal was to bring missing technologies to + Unix and make it competitive in the current market place for + desktop applications. We also realized early on that language + independence was important, and that is why GNOME APIs were + coded using a standard that allowed the APIs to be easily + wrapped for other languages. Our APIs are available to most + programming languages on Unix (Perl, Python, Scheme, C++, + Objective-C, Ada). + + Later on we decided to use better methods for encapsulating + our APIs, and we started to use CORBA to define interfaces to + components. We complemented it with policy and a set of + standard GNOME interfaces for easily creating reusable, + language independent components, controls and compound + documents. This technology is known as <a + href="http://developer.ximian.com/tech/bonobo.html">Bonobo</a>. + Interfaces to Bonobo exist for C, Perl, Python, and + Java. + + CORBA is good when you define coarse interfaces, and most + Bonobo interfaces are coarse. The only problem is that + Bonobo/CORBA interfaces are not good for small interfaces. + For example, an XML parsing Bonobo/CORBA component would be + inefficient compared to a C API. + +** Another explanation + + I recently explained our motivations to Dave Winer, and he posted + it <a + href="http://scriptingnews.userland.com/stories/storyReader$1275">here</a> + +** Microsoft's .NET + + The Microsoft .NET initiative is confusing because it is a + company wide effort that ranges from development tools to end + user applications. .NET is a branding formative that + has been applied to: + + <ul> + * The .NET development platform, a new platform for + writing software. + + * Web services. + + * Microsoft Server Applications. + + * New tools that use the new development platform. + + * Hailstorm, the Passport centralized single-signon + system that is being integrated into Windows XP. + + </ul> + + Mono is an implementation of the .NET development platform. + +** The Common Language Infrastructure platform. + + Microsoft has created a new development platform. The + highlights of this new development platform are: + + <ul> + * A runtime environment that provides garbage + collection, threading and a virtual machine + specification (The Virtual Execution System, VES) + + * A comprehensive class library. + + * A new language, C#. Very similar to Java, C# + allows programmers to use all the features available + on the .NET runtime. + + * A language specification that compilers can + follow if they want to generate classes and code + that can interoperate with other programming + languages (The Common Language Specification: CLS) + </ul> + + The Common Language Infrastructure platform is similar to the + goals we had in GNOME of giving language independence to + programmers. It is more mature, documented, larger in scope, + and has a consistent design. + + Any API that is written using a CLS provider language can be + used by any language that is a CLS consumer. Compilers + generate code in a format called Common Intermediate Language + (CIL) which is an intermediate representation of a compiled + program and is easy to compile to native code or compiled + using Just-in-Time (JIT) engines. The restrictions placed by + the runtime on the CIL byte codes ensures that it is possible + to do a good job at optimizing the code in a JIT compiler. + + There is not really a lot of innovation in this platform: we + have seen all of these concepts before, and we are all + familiar with how these things work. + + What makes the Common Language Infrastructure development + platform interesting is that it is a good mix of technologies + that have been nicely integrated. + + The .NET development platform is essentially a new foundation + for program development that gives Microsoft a room to grow + for the coming years. + +** ECMA standards. + + Microsoft has submitted the + specifications of C#, the runtime, the metadata and the + other various bits of the .NET development platform to the + <a href="http://www.ecma.ch">ECMA</a> for standarization. + + You can get a copy of the specifications submitted to ECMA + from: <a href="http://www.dotnetexperts.com/ecma">http://www.dotnetexperts.com/ecma</a> + +** Mono: an Open Source Common Language Infrastructure implementation. + + Ximian has begun work on Mono, a project that aims to bring + the Common Language Infrastructure platform to free systems. + + When the GNU project was launched, they picked the best + operating system that was available out there, and they + began to clone it: Unix. + + The .NET development platform is a very rich, powerful, and + well designed platform that would help improve the free + software development platform. Just like the GNU project + began to clone Unix sixteen years ago, we will be cloning the + .NET development platform because it is a great platform to + build on. + +** What makes up Mono? + + There are various pieces that will make up Mono: + + <ul> + * A C# compiler. + + * The Virtual Execution System: that will have the + Just-in-Time compiler, garbage collector, loader, + threading engine. + + A byte code interpreter will be provided for quickly + porting Mono to new systems and debugging the JIT + purposes, but it is not intended to be the ideal + execution environment. + + * An implemenation of the .NET class library. + + * Visual development tools. + + * A CIL GCC frontend. + </ul> + +** Why use GNOME components? + + GNOME is an umbrella project that consists of infrastructural + components (GUI toolkit, XML libraries, CORBA implementation, + printing architecture, imaging system), a desktop environment, + and productivity applications. + + The GNOME infrastructural components can be used to quickly + implement various pieces of the class libraries without reinventing + the wheel, and since all those components are licensed under + the terms of the GNU LGPL it is a perfect fit. + + Libart will be used to implement the Drawing.2D API; Gtk+ and + the GNOME libraries will be used to implement the WinForms + API and of course Glib and libxml will be used in various + places.
\ No newline at end of file diff --git a/web/release-notes/mono-0.3 b/web/release-notes/mono-0.3 new file mode 100644 index 00000000000..4976037b957 --- /dev/null +++ b/web/release-notes/mono-0.3 @@ -0,0 +1,46 @@ +To: mono-list@ximian.com, mono-announce-list@ximian.com +Subject: July 12 snapshots. +FCC: ~/Mail/outbox.txt +X-Windows: Sometimes you fill a vacuum and it still sucks. +--text follows this line-- + +Hey! + + July 12 snapshots of class libraries, the compiler and the mono +runtime are available. + +New on this release: + + * Runtime (module: mono) + + The beginning of a simple interpreter that Paolo started + workign on (can run really simple .NET programs). + + Disassembler copes with more elements of the binary format and + more tokens are decoded. Paolo is working now on moving some + of these to the metadata library. + + More tables are dumped. + + * Class libraries (module: mcs/class) + + Many new more classes are in from Joe, Vladimir, Jeff, Sean + and yours truly. + + Sean fixed the build process, and it is now possible to + compile with a single command the assemblies. We will be + revisiting this mechanism in the future to compile per-OS + assemblies (ie, Unix, Windows, MacOS, etc). + + * Compiler (module mcs/mcs) + + Not much done this week, just a few fixes here and there, and + more work to make it easy to compiler. + + * Documentation (module: mono/doc) + + All the changes to the web site are there for your browsing + pleasure. We still need to integrate the status system in + there. + +Miguel. diff --git a/web/release-notes/mono-0.4 b/web/release-notes/mono-0.4 new file mode 100644 index 00000000000..1d7e1cea5f1 --- /dev/null +++ b/web/release-notes/mono-0.4 @@ -0,0 +1,43 @@ +To: mono-list@ximian.com +Subject: Sunday snapshot available. +Gcc: mail.2001-07 +--text follows this line-- + +Hey guys, + + I promise I will not be doing these so often once we have the CVS +server up. In the meantime: + + * MCS + + Sean got the classes to compile in a single go. You + will need CygWin (www.cygwin.org) to compile though + (GNU make and stuff is required). + + System.Xml.XmlReader contribution from Jason + (WOOHHOO!!). It also contains a nice test-suite for + his functions, and in his new code bit, his + implementation is faster than Microsoft's + + We now ship `jay' as part of the distribution to allow + you to compile the compiler with the same `make' + command. Small fixes to the parser as well were + introduced. + + * Mono 0.4 + + Paolo's interpreter supports call instructions and has + the test suite program that he posted about. + + + All documentation ships now in the mono-0.4.tar.gz + +Notes: + + As usual, MCS is targeted to be compiled on a Windows machine + (you will need Cygwin). + + Mono is targeted to be compiled on a Unix machine or a Windows + machine running Cygwin. + +Miguel.
\ No newline at end of file diff --git a/web/resources b/web/resources new file mode 100644 index 00000000000..f85105feb2e --- /dev/null +++ b/web/resources @@ -0,0 +1,235 @@ + +* Resources + + There are a number of resources available for those of you who + want to contribute to the Mono project. Here are a few links. + + If you want to send suggestions for links, address them to <a + mailto="web-mono@ximian.com">web-mono@ximian.com</a>. + +** Microsoft .NET + + The <a href="http://msdn.microsoft.com/net">Microsoft.NET site.</a> + + The Microsoft .NET Framework 1.0 can be downloaded <a + href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a> + + New methods that are not documented in 1.0, are documented <a + href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/framewrkaddend.asp">here</a> + + The changes between .NET 1.0 and .NET 1.1 are available <a href="http://www.csharphelp.com/archives2/archive406.html">here</a> + +** IRC + + Various Mono contributors get together on channel #mono on + irc.gnome.org + +** Mono related sites. + + The Mono Tutorial: + + <a href="http://http://go-mono.com/gnometutorial/">GNOME.NET Tutorial</a> + + and other useful tutorials (Gtk#, Glade#, Embeded, etc) (in Spanish) at + + <a href="http://mono.es.gnome.org">The Mono Hispano site</a>. + + Sergey's web page on Mono resources: + + <a href="http://mono.eurosoft.od.ua">http://mono.eurosoft.od.ua</a> + + Got Dot Net: + + <a href="http://www.gotdotnet.com">Got Dot Net</a> + + MonoMail: + + <a href="http://sourceforge.net/projects/monomail/">http://sourceforge.net/projects/monomail/</a> + + Zip classes: + + Mike's port to .NET: <a + href="http://www.icsharpcode.net/OpenSource/NZipLib/default.asp">NZipLib</a> + + .NET Security: + + A nice overview paper on the <a + href="http://www.foundstone.com/pdf/dotnet-security-framework.pdf">.NET + security architecture</a>. + +** Development Tools + + A tool to compare two assemblies: + + <ul> + <li><a href="http://www.gotdotnet.com/userarea/keywordsrch.aspx?keyword=winchurn">http://www.gotdotnet.com/userarea/keywordsrch.aspx?keyword=winchurn</a> + </ul> + +** Presentations + + Currently the <a href="Presentations/O-Reilly">O'Reilly</a> + presentation on Mono is available. Arturo Espinosa has given + a talk on Mono in Mexico and made <a + href="http://construct.ximian.com/~arturo/Presentations/Mono.OLS/html">spanish + slides</a> + +** ECMA Documentation. + + You can get the documentation for the ECMA specs from: + + <ul> + * <a href="http://www.ecma.ch/ecma1/STAND/ecma-334.htm">C# Language Specification</a> + * <a href="http://www.ecma.ch/ecma1/STAND/ecma-335.htm">Common Language Infrastructure</a> + </ul> + + + Older copies of the standard are available here: + + <ul> + * <a href="http://msdn.microsoft.com/net/ecma">At MSDN</a> + * <a href="http://www.dotnetexperts.com">Dot Net Experts</a> + * <a href="http://developer.intel.com/software/idap/ecma">Intel</a> + * <a href="http://lightning.csse.monash.edu.au/.net/CLI">Monash University</a> + </ul> + + These contain specifications for the assembler, the metadata, + byte codes supported by the CLI virtual machine, the C# + language and the core class libraries. + + For details on the .NET class libraries, you can + visit the Microsoft's Developer Network: + + <ul> + * <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/cpref_start.asp">.NET Framework Class Library</a> + </ul> + + You can also get this information if you install the Beta2 + release of the .NET Framework. + +** Discussion Groups. + + <ul> + + * <a href="http://www.oreillynet.com">O'Reilly + Network</a> has a <a + href="http://www.oreillynet.com/dotnet">section devoted to + .NET</a> + * <a + href="http://msdn.microsoft.com/newsgroups">MSDN</a> also + lists various newsgroups related to .NET</ul> + </ul> + +** Other .NET related projects + + There are a number of related projects to Mono: + + <li><b>Development tools</b></li> + <ul> + * <a + href="http://www.icsharpcode.net/OpenSource/SD/default.asp">Sharp + Develop:</a> an IDE for the C# language written in C#. + + * <a href="http://nunit.sourceforge.net">NUnit:</a> A + testing framework for .NET classes. + + * <a + href="http://xmarks.sourceforge.net/doc.html">XMarks DOC.NET:</a> For + creating online documentation you can browse for your own classes. + + </ul> + + <li><b>Class Libraries</b></li> + <ul> + * <a href="http://9mm.com/~ogl/sdldotnet/">SDL for + .NET:</a> Bindings for the popular SDL graphics library. + + + * C# bindings for OpenGL and SDL are available here: <a + href="http://csgl.sourceforge.net">http://csgl.sourceforge.net</a> + + * <a + href="http://qtcsharp.sourceforge.net">Qt#:</a> + C# bindings for the Qt toolkit. + + * <a + href="http://codigolivre.org.br/projects/monoqle">Project MonoQLE:</a> a C# Message Queue Server. + Sorry only in portuguese, for now. + + </ul> + + <li><b>Programming languages:</b></li> + <ul> + * <a + href="http://janet-js.sourceforge.net/">Janet:</a> + an implemention of ECMAScript (the standarized + version of JavaScript) in C# + </ul> + + <li><b>Other projects</b></li> + <ul> + * <a + href="http://www.improve-technologies.com/alpha/esharp/">Eclipse + Plugin for C#</a> + + * <a href="http://www.kaffe.org">Kaffe:</a> A popular + Free Software JIT engine for Java. + + * <a href="http://www.intel.com/research/mrl/orp">ORP:</a> A research + JIT/VM/GC system from Intel. + + * <a + href="http://www.southern-storm.com.au/portable_net.html">Portable.NET:</a> + Another implementation of the CLI and C# compiler. + + * A Free (GFDL) tutorial on C# in Spanish with + examples, slides, and extras (under development). Get it <a + href="http://geneura.ugr.es/~jaime/csharp/">here</a>. + </ul> + +** GNOME Documentation + + Documentation on GNOME, and the GNOME APIs is available from + the <a href="http://developer.gnome.org">developer</a> site at + GNOME: + + <ul> + * <a href="http://developer.gnome.org/doc/API/">GNOME + API documentation</a> + + * <a href="http://developer.gnome.org/doc/books">GNOME + Online books</a> + + * <A + href="http://developer.gnome.org/arch/">Architecture Overview</a> + </ul> + +** Assembly Language Manuals online + + <ul> + * <a href="http://www.agner.org/assem/#optimize"> + Pentium optimization tutorial</a> by Agner Fog + + * <a href="http://webster.cs.ucr.edu/"> + Art of Assembly</a> (x86 only) + + * Documentation for various CPUs + (<a href="http://www.mit.edu/afs/sipb/contrib/doc/specs/ic/cpu/"> + x86, IA64, MIPS, ARM, Alpha</a>) + + * <a href="http://www.heyrick.co.uk/assembler/"> + ARM Assembler</a> tutorial + + * PowerPC + <a href="http://www-3.ibm.com/chips/techlib/techlib.nsf/techdocs/852569B20050FF7785256996007558C6"> + Compiler Writer's Guide</a> + + * <a href="http://www.lightsoft.co.uk/Fantasm/Beginners/begin1.html"> + Beginners Guide to PowerPC Assembler</a> + </ul> + +** Win32 + + <ul> + * Win32 <a href="http://www.jorgon.freeserve.co.uk/ExceptFrame.htm"> + Structured Exception Handling (SEH)</a> internals (x86 specific) + </ul> diff --git a/web/resources-pending b/web/resources-pending new file mode 100644 index 00000000000..fd9b9073d64 --- /dev/null +++ b/web/resources-pending @@ -0,0 +1,30 @@ +** MacOS Documentation + +** Assembly Language Manuals online + Intel + MIPS + SPARC + +** Microsoft + msdn.microsoft.com/net + Research.microsoft.com + +** Related Technologies + + <ul> + + * The CLI allows people to create Web Services using the SOAP + protocol. SOAP is based on XML, XML schemas an the HTTP + protocol. + <ul> + * XML specification. + * XML Namespaces. + * XML Schemas. + * SOAP Specification. + </ul> + </ul> + +** Compiler Information + GCC + GCC Sample front-end tutorial + diff --git a/web/roadmap b/web/roadmap new file mode 100644 index 00000000000..6cdfa1366a8 --- /dev/null +++ b/web/roadmap @@ -0,0 +1,12 @@ +* Roadmap + + We are working on the following three projects at Ximian: + + The C# Compiler (mcs/mcs) + + A .NET compatible Class Library (mcs/class) + + The JIT/interpreter (mono) + + +
\ No newline at end of file diff --git a/web/runtime b/web/runtime new file mode 100644 index 00000000000..ecae4673a7e --- /dev/null +++ b/web/runtime @@ -0,0 +1,169 @@ +* The Mono runtime + + The Mono runtime implements a JIT engine for the CIL virtual + machine (as well as a byte code interpreter, this is to + quickly port it to new systems), the class loader, the garbage + collector, threading system and metadata access libraries. + + We currently have two runtimes: + + <ul> + * <b>mono:</b> The Just In Time compiler implemented + using a BURS instruction selector. We only support + x86 machines in the JIT engine at this point. + + * <b>mint:</b> The Mono interpreter. This is an + easy-to-port runtime engine. + </ul> + + Currently we are using the Bohem conservative garbage + collector. + + The Mono runtime can be used as a stand-alone process, or it + can be <a href="embedded-api">embedded into applications</a> (see + the documentation in mono/samples/embed for more details). + + Embedding the Mono runtime allows applications to be extended + in C# while reusing all of the existing C and C++ code. + + Paolo Molaro did a presentation on the current JIT engine and + the new JIT engine. You can find his <a + href="http://primates.ximian.com/~lupus/slides/jit/">slides + here</a> + +** Current JIT Engine (<b>updated, July 8th, 2002</b>) + + The JIT engine uses a code-generator generator approach for + compilation. Given the properties of CIL byte codes, we can + take full advantage of a real instruction selector for our + code generator. + + The JIT engine implements a number of optimizations: + + <ul> + * Opcode cost estimates (our architecture allows + us to generate different code paths depending + on the target CPU dynamically). + + * Inlining. + + * Constant folding. + + Although compilers typically do + constant folding, the combination of inlining with + constant folding gives some very good results. + + * Linear scan register allocation. In the past, + register allocation was our achilles heel, but now + we have left this problem behind. + </ul> + + There are a couple of books that deal with this technique: "A + Retargetable C Compiler" and "Advanced Compiler Design and + Implementation" are good references. You can also get a + technical description of <a + href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/~drh/pubs/iburg.pdf&pub=ACM">lbrug</a>. + + A few papers that describe the instruction selector: + + <ul> + * <a href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/~drh/pubs/interface.pdf&pub=wiley">A code generation interface for ANSI C</a> + + + * <a href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/~drh/pubs/iburg.pdf&pub=ACM">Engineering efficient code generators using tree matching and dynamic programming.</a> + + </ul> + +** New JIT engine. + + We are working on a new JIT engine. The new JIT engine + focuses on portability and in two intermediate representations + that simplify the development of optimizations. This together + with the Ahead-of-Time compilation will allow developers to + deploy applications that match the speed of natively compiled code. + +** Garbage Collection + + Currently we are using the Boehm conservative GC. Although our plans + are to move to the Intel ORP GC engine, our plans on a next generation + dual-JIT engine have to be taken into account. + + We will be using the Intel ORP GC engine as it provides a precise + garbage collector engine, similar to what is available on the + .NET environment. + + Although using a conservative garbage collector like Bohem's + would work, all the type information is available at runtime, + so we can actually implement a better collector than a + conservative collector. + + <ul> + * Garbage collection list and FAQ:<br> + <a href="http://www.iecc.com/gclist/">http://www.iecc.com/gclist/</a> + + * "GC points in a Threaded Environment":<br> + <a href="http://research.sun.com/techrep/1998/abstract-70.html"> + http://research.sun.com/techrep/1998/abstract-70.html</a> + + * "A Generational Mostly-concurrent Garbage Collector": + <a href="http://research.sun.com/techrep/2000/abstract-88.html"> + http://research.sun.com/techrep/2000/abstract-88.html</a> + + * Details on The Microsoft .NET Garbage Collection Implementation:<br> + <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/GCI.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/GCI.asp</a> + <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/GCI2.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/GCI2.asp</a> + </ul> + +** IO and threading + + The ECMA runtime and the .NET runtime assume an IO model and a + threading model that is very similar to the Win32 API. + + Dick Porter has been working on the Mono abstraction layer + that allows our runtime to execute code that depend on this + behaviour. + +** Useful links + + Paolo Molaro found a few interesting links: + + <ul> + * On compilation of stack-based languages:<br> + <a href="http://www.complang.tuwien.ac.at/projects/rafts.html"> + http://www.complang.tuwien.ac.at/projects/rafts.html</a> + + * A paper on fast JIT compilation of a stack-based language:<br> + <a href="http://www.research.microsoft.com/~cwfraser/pldi99codegen.pdf"> + http://www.research.microsoft.com/~cwfraser/pldi99codegen.pdf</a> + + * Vmgen generates much of the code for efficient virtual machine (VM) + interpreters from simple descriptions of the VM instructions:<br> + <a href="http://www.complang.tuwien.ac.at/anton/vmgen/"> + http://www.complang.tuwien.ac.at/anton/vmgen</a> + </ul> + +** PInvoke + + PInvoke is the mechanism we are using to wrap Unix API calls + as well as talking to system libraries. + + Initially we used libffi, but it was fairly slow, so we have + reused parts of the JIT work to create efficient PInvoke trampolines. + +** Remoting + + Mono has support for remoting and proxy objects, just like + .NET does. The runtime provides these facilities. + +** Porting + + If you are interested in porting the Mono runtime to other + platforms, you might find the pre-compiled <a + href="archive/mono-tests.tar.gz">Mono regression test + suite</a> useful to debug your implementation. + +* COM and XPCOM + + We plan on adding support for XPCOM on Unix and COM on Microsoft + Windows later in our development process. + diff --git a/web/sqlclient b/web/sqlclient new file mode 100755 index 00000000000..df76f9d620a --- /dev/null +++ b/web/sqlclient @@ -0,0 +1,147 @@ +* Microsoft SQL Server Provider + +<ul> + <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases</li> + + <li>Exists in namespace System.Data.SqlClient and assembly System.Data</li> + + <li>Created by Tim Coleman</li> + + <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and + <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li> + + <li>Implemented in 100% C#</li> + + <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.</li> + + <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li> + + <li>Uses TDS Protocol Version 7.0</li> + + <li>Does not support trusted connections</li> +</ul> + + +** Current Status + + +<ul> + <li>Able to connect to Microsoft SQL Server 7/2000 databases</li> + + <li>Connection pooling works.</li> + + <li>Stored Procedures work</li> + + <li>Parameters work.</li> + + <li>Prepare works.</li> + + <li>SQL commands can be executed + via ExecuteNonQuery() of a SqlCommand.</li> + + <li>SQL aggregates can be executed and a single row and single column + result can be retrieved via ExecuteScalar() of a SqlCommand</li> + + <li>SQL queries can be executed via ExecuteReader() and results + can be retrieved via SqlDataReader.</li> + + <li>a DataTable with schema info about a result can be gotten via GetSchemaTable() + in a SqlDataReader</li> + + <li>XML can be read via ExecuteXmlReader in a SqlCommand.</li> + + <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter</li> + + <li>Uses TDS Protocol Version 7.0</li> + + <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a></li> +</ul> + +** Action plan + +<ul> + <li>Connection timeouts is being developed now. + + <li>Needs more testing... + +</ul> + +** Testing + +<ul> + <li>Have a working mono and mcs installed</li> + + <li>Have access to a Microsoft SQL Server database + or either download it: + <ul> + <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li> + </ul> + </li> + + <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient + named SqlTest.cs and you could use this as a basis for your test.</li> + + <li>C# Example: +<pre> + using System; + using System.Data; + using System.Data.SqlClient; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "Server=localhost;" + + "Database=pubs;" + + "User ID=sa;" + + "Password=;"; + IDbConnection dbcon; + dbcon = new SqlConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + string sql = + "SELECT fname, lname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["fname"]; + string LastName = reader["lname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs -r System.Data.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> + +</ul> + diff --git a/web/sqlite b/web/sqlite new file mode 100755 index 00000000000..85b35c997aa --- /dev/null +++ b/web/sqlite @@ -0,0 +1,112 @@ +* SQL Lite Data Provider + +<ul> + <li>Exists in namespace and assembly Mono.Data.SqliteClient</li> + + <li>Created by Vladimir Vukicevic</li> + + <li><a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a> + binaries exist for Linux and Windows. sqlite.dll on Windows + and sqlite.so on Linux.</li> +</ul> + +** Current Status + +<ul> + <li>Able to connect, execute commands, and retrieve data...</li> + + <li>Works in mPhoto by providing access to a SQL Lite database to store images.</li> +</ul> + +** Action Plan + +<ul> + <li>Create a DataAdapter for SQL Lite named SqliteDataAdapter that can be used to + Fill a DataTable in a DataSet</li> + + <li>Get the method GetSchemaTable() in class SqliteDataReader to return a DataTable + that works</li> +</ul> + +** Testing + +<ul> + <li>Have a working mcs and mono</li> + <li>Make sure Mono.Data.SqliteClient.dll was built and is installed + in the same place as the mono class libraries.</li> + <li>If you do not have <a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>, + download it. There are binaries for Windows and Linux.</li> + <li>There is a test named SqliteTest.cs found at mcs/class/Mono.Data.SqliteTest/Test</li> + <li>Has a connection string format of "URI=file:some/path". For example, + the connection string "URI=file:SqliteTest.db" will use the database file + named SqliteTest.db, if it does not exist, the file will be created.</li> + <li>C# Example: +<pre> + using System; + using System.Data; + using Mono.Data.SqliteClient; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = "URI=file:SqliteTest.db"; + IDbConnection dbcon; + dbcon = new MySQLConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + // requires a table to be created named employee + // with columns firstname and lastname + // such as, + // CREATE TABLE employee ( + // firstname varchar(32), + // lastname varchar(32)); + string sql = + "SELECT firstname, lastname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader[0]; + string LastName = reader[1]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r Mono.Data.SqliteClient.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll \ + -r Mono.Data.SqliteClient.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> + +</ul> + diff --git a/web/status b/web/status new file mode 100644 index 00000000000..64948ba312f --- /dev/null +++ b/web/status @@ -0,0 +1,40 @@ +* Project Status + + + Pieces of Mono that have been implemented: + + <ul> + * C# compiler: The C# compiler is mostly complete, a + few features are still missing (for a list, check the + <a href="c-sharp.html">C# compiler</a> web page. + + * The Mono JIT engine (<b>mono</b>. The JIT engine is + the real + virtual machine that we support. It is + currently functional, and we are improving its speed, + and making it feature complete. + + * A CIL bytecode interpreter (<b>mint</b>). This + currently can be used to run most .NET programs + (modulo the fact that our class libraries are not + complete enough). + + <b>mint</b> can currently run the Mono C# compiler and + the compiler generates valid code. + + We use <b>mint</b> as a reference implementation of + the runtime environment and to quickly support + non-Intel platforms. + + * Metadata library: Can currently parse + and load information from .NET modules (executables + and DLL files). + + * Disassembler: Can disassemble .NET modules. Still + lacking exception handling as well as useful debugging + tools (hex dumping, token dumping). + + * Class Libraries: You can check the current status in the + <a href="class-status.html">Class Status page</a>. + </ul> + diff --git a/web/sybase b/web/sybase new file mode 100755 index 00000000000..6a3b859c5b1 --- /dev/null +++ b/web/sybase @@ -0,0 +1,134 @@ +* Sybase Data Provider + +<ul> + <li>ADO.NET Provider for Sybase SQL Server databases</li> + + <li>Exists in namespace Mono.Data.SybaseClient and assembly Mono.Data.SybaseClient</li> + + <li>Created by Tim Coleman</li> + + <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and + <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li> + + <li>Implemented in 100% C#</li> + + <li>Is similar to the Mono.Data.TdsClient and System.Data.SqlClient providers.</li> + + <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li> + + <li>Uses TDS Protocol Version 5.0</li> + + <li>Does not support trusted connections</li> +</ul> + +** Current Status + +<ul> + <li>Able to connect to Sybase databases</li> + + <li>SQL commands can be executed + via ExecuteNonQuery() of a SybaseCommand.</li> + + <li>SQL aggregates can be executed and a single row and single column + result can be retrieved via ExecuteScalar() of a SybaseCommand</li> + + <li>SQL queries can be executed via ExecuteReader() and results + can be retrieved via SybaseDataReader.</li> + + <li>a DataTable with schema info about a result can be gotten via GetSchemaTable() + in a SybaseDataReader</li> + + <li>Data can be filled in a DataTable in a DataSet via a SybaseDataAdapter</li> +</ul> + +** Action plan + +<ul> + <li>Connection timeouts is being developed now. + + <li>Needs more testing... + +</ul> + +** Testing + +<ul> + <li>Have a working mono and mcs installed</li> + + <li>Have access to a Sybase database + or either download it: + <ul> + <li><a href="http://www.sybase.com/downloads">Sybase</a></li> + </ul> + </li> + + <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient + named SqlTest.cs and you could use this as a basis for your test.</li> + + <li>C# Example: +<pre> + using System; + using System.Data; + using Mono.Data.SybaseClient; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "Server=localhost;" + + "Database=pubs;" + + "User ID=sa;" + + "Password=;"; + IDbConnection dbcon; + dbcon = new SybaseConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + string sql = + "SELECT fname, lname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["fname"]; + string LastName = reader["lname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r Mono.Data.SybaseClient.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r Mono.Data.SybaseClient.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> + +</ul> + diff --git a/web/tds-providers b/web/tds-providers new file mode 100644 index 00000000000..6442e69601a --- /dev/null +++ b/web/tds-providers @@ -0,0 +1,164 @@ +* Design of the Microsoft SQL Server, Sybase, and TDS Data Providers in Mono + + <ul> + * After much discussion among the Mono ADO.NET developers, + we have come up with the design of implementing a Sybase, Microsoft + SQL Server, and TDS Generic ADO.NET providers. These providers have + been created and are actively developed by Tim Coleman. + + * Since Sybase and Microsoft SQL Server databases both + use the TDS protocol for data access, and other implementations + of TDS (FreeTDS and jTDS) have included support for multiple + versions of the TDS, we have decided to do the same. + + * The TdsClient ADO.NET provider will be Mono's first provider + written completely in C# without any dependencies except + the usual suspects: corlib.dll, System.dll, and System.Xml.dll. + </ul> + +* New ADO.NET Providers + +<p>There will be three ADO.NET providers that will use TDS. + + <ol> + <li><p>Mono.Data.SybaseClient namepace and assembly will + hold the ADO.NET provider for Sybase SQL Server database. + This provider uses TDS version 5.0 which + can only be used with Sybase databases. + + <li><p>System.Data.SqlClient namespace and System.Data assembly + will hold the ADO.NET provider + for Microsoft SQL Server 7.0/2000 databases. This provider is to be + compatible with SqlClient in Microsoft .NET and uses TDS version 7.0 + which only supports Microsoft SQL Server 7.0/2000. + There is TDS version 8.0 + which we will need to support as well, but it is used for + Microsoft SQL Server 2000 databases. + + <li><p>Mono.Data.TdsClient namespace and assembly is a generic + provider for older TDS databases. This provider will default to + using TDS version 4.2 which can be used by older Sybase and + Microsoft SQL Server databases. + </ol> + +* Building The New Providers + + <p> All three providers will use common internal code + at Mono.Data.TdsClient.Internal. Any classes in + Mono.Data.TdsClient.Internal will have the internal + keyword and will be built with the assembly of that provider. + <ol> + <li><p>SqlClient will build its assembly System.Data using files + from System.Data, System.Data.SqlClient, System.Data.SqlTypes, + System.Data.Common, and Mono.Data.TdsClient.Internal. + + <p>SqlClient + will only reference the usual + suspects: corlib.dll, System.dll, and System.Xml.dll. SqlClient will be + a wrapper around TdsClient.Internal, but provide specific functionality to + Microsoft SQL Server 7.0/2000 databases. + + <p>SqlClient build example: + +<pre> + mcs -target:library -out:System.Data.dll \ + System.Data.SqlClient/*.cs \ + ..\Mono.Data.TdsClient\Mono.Data.TdsClient.Internal\*.cs \ + [any other classes in System.Data assembly...] \ + -r corlib.dll -r System.dll -r System.Xml.dll +</pre> + + <li><p>SybaseClient will build its assembly Mono.Data.SybaseClient using + files from Mono.Data.SybaseClient and Mono.Data.TdsClient.Internal. + SybaseClient will reference + the usual suspects plus System.Data.dll SybaseClient will + be a wrapper around TdsClient.Internal, but provide specific + functionality to Sybase. + + <p>SybaseClient build example: + +<pre> + mcs -target:library -out:Mono.Data.SybaseClient.dll \ + Mono.Data.SybaseClient\*.cs \ + ..\Mono.Data.TdsClient\Mono.Data.TdsClient.Internal\*.cs + -r corlib.dll -r System.dll -r System.Xml.dll -r System.Data.dll +</pre> + + <li><p>TdsClient will build its assembly Mono.Data.TdsClient + using files from Mono.Data.TdsClient + and Mono.Data.TdsClient.Internal. TdsClient will reference the + usual suspects plus System.Data.dll TdsClient is a wrapper + provider around TdsClient.Internal used for generic + unit tests. TdsClient will a wrapper around TdsClient.Internal + as a generic TDS provider + and allow TDS configuration options not exposed in SqlClient + nor SybaseClient, such as, TdsVersion will be exposed in TdsClient + but not in SqlClient nor SybaseClient. + + <p>TdsClient build example: + +<pre> +mcs -target:library -out:Mono.Data.TdsClient.dll \ + Mono.Data.TdsClient\*.cs \ + Mono.Data.TdsClient.Internal\*.cs \ + -r corlib.dll -r System.dll -r System.Xml.dll -r System.Data.dll +</pre> + </ol> + +* Classes in Mono.Data.TdsClient.Internal will: + + <ul> + <li>use the internal keyword to prevent exposing these classes + to the System.Data.dll assembly. + + <li> implement the ADO.NET interfaces just like any other ADO.NET provider, such as, + IDbConnection, IDbCommand, IDataReader, IDataRecord, IDataAdapter, etc... + + <li> be sealed just like other providers + + <li> provide features to be directly used by the SqlClient and SybaseClient + providers, such + as, setting the default TDS version: SqlClient to 7.0 and SybaseClient + to 5.0 and TdsClient to 4.2. + + <li> be written completely in C# or IL assembly language (if need be). + + <li> implement the TDS protocol version 4.2, 5.0, 7.0, and 8.0. This + is where most of the + work will take place. + + <li> be an internal ADO.NET provider to the public ADO.NET providers: + System.Data.SqlClient, Mono.Data.SybaseClient, and Mono.Data.TdsClient. + </ul> + +* Implementation Details of the TDS Protocol + + <ul> + * will be implemented in pure C# from scratch + + * will reside in Mono.Data.TdsClient.Internal + + * will use FreeTDS and jTDS as rerferences. + </ul> + +* More Information + + <ul> + * <a href="http://www.freetds.org/">FreeTDS</a> is C API that implements + the TDS protocol. Has libraries for tds, ctlib, and dblib. It builds + and runs on Windows, Linux, and other platforms. FreeTDS provides + data access to Microsoft SQL Server and Sybase databases. + + * <a href="http://jtds.sf.net/">jTDS</a> is a 100% Java JDBC provider + for Microsoft SQL Server and Sybase databases. + + * <a href="http://www.freetds.org/tds.html">TDS Protocol</a> + </ul> + +* Contribute + + <p>Anybody willing to help? If so, + contact any of the people working on the ADO.NET support + in Mono: Rodrigo Moya, Tim Coleman, Daniel Morgan, Brian Ritchie, + Vladimir Vukicevic, Ville Palo, Franklin Wise, and others. + diff --git a/web/tdsclient b/web/tdsclient new file mode 100755 index 00000000000..c5f494a7c66 --- /dev/null +++ b/web/tdsclient @@ -0,0 +1,137 @@ +* TDS Generic Provider + +<ul> + <li>ADO.NET Provider for older Sybase and Microsoft SQL Server databases</li> + + <li>Exists in namespace Mono.Data.TdsClient and assembly Mono.Data.TdsClient</li> + + <li>Created by Tim Coleman</li> + + <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and + <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li> + + <li>Implemented in 100% C#</li> + + <li>Is similar to the Mono.Data.SybaseClient and System.Data.SqlClient providers.</li> + + <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li> + + <li>Uses TDS Protocol Version 4.2 by default</li> + + <li>Does not support trusted connections</li> +</ul> + +** Current Status + + +<ul> + <li>Only builds on Windows currently due to mcs does not support modules and mcs + has problems with code that is internal.</li> + + <li>Able to connect to Microsoft SQL Server and Sybase databases</li> + + <li>SQL commands can be executed + via ExecuteNonQuery() of a TdsCommand.</li> + + <li>SQL aggregates can be executed and a single row and single column + result can be retrieved via ExecuteScalar() of a TdsCommand</li> + + <li>SQL queries can be executed via ExecuteReader() and results + can be retrieved via TdsDataReader.</li> + + <li>a DataTable with schema info about a result can be gotten via GetSchemaTable() + in a TdsDataReader</li> + + <li>Data can be filled in a DataTable in a DataSet via a TdsDataAdapter</li> +</ul> + +** Action plan + +<ul> + <li>Connection timeouts is being developed now.</li> + + <li>TODO</li> +</ul> + +** Testing + +<ul> + <li>Have a working mono and mcs installed</li> + + <li>Have access to a Sybase or Microsoft SQL Server database + or either download it: + <ul> + <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li> + <li><a href="http://www.sybase.com/downloads">Sybase</a></li> + </ul> + </li> + + <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient + named SqlTest.cs and you could use this as a basis for your test.</li> + + <li>C# Example: +<pre> + using System; + using System.Data; + using Mono.Data.TdsClient; + + public class Test + { + public static void Main(string[] args) + { + string connectionString = + "Server=localhost;" + + "Database=pubs;" + + "User ID=sa;" + + "Password=;"; + IDbConnection dbcon; + dbcon = new TdsConnection(connectionString); + IDbCommand dbcmd = dbcon.CreateCommand(); + string sql = + "SELECT fname, lname " + + "FROM employee"; + dbcmd.ConnectionString = sql; + IDataReader reader = dbcmd.ExecuteReader(); + while(reader.Read()) { + string FirstName = reader["fname"]; + string LastName = reader["lname"]; + Console.WriteLine("Name: " + + FirstName + " " + LastName); + } + // clean up + reader.Close(); + reader = null; + dbcmd.Dispose(); + dbcmd = null; + dbcon.Close(); + dbcon = null; + } + } +</pre> + </li> + <li>Building C# Example: + <ul> + <li>Save the example to a file, such as, TestExample.cs</li> + <li>Build on Linux: +<pre> + mcs TestExample.cs -r System.Data.dll \ + -r Mono.Data.TdsClient.dll +</pre> + </li> + <li>Build on Windows via Cygwin: +<pre> + mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \ + TestExample.cs \ + -lib:C:/cygwin/home/MyHome/mono/install/lib \ + -r System.Data.dll -r Mono.Data.TdsClient.dll +</pre> + </li> + </ul> + </li> + <li>Running the Example: +<pre> +mono TestExample.exe +</pre> + </li> +</ul> + diff --git a/web/team b/web/team new file mode 100644 index 00000000000..eff7bc9d3d5 --- /dev/null +++ b/web/team @@ -0,0 +1,2 @@ +* The MonoNet Team + diff --git a/web/testing b/web/testing new file mode 100644 index 00000000000..c76a9b5f1d8 --- /dev/null +++ b/web/testing @@ -0,0 +1,186 @@ +* Testing + + Testing is an important part of the Mono project: every one of its + three major components has a test suite tailored for its needs. This + is very helpful, because in the course of developing the software it + is very common to introduce bugs in existing code. A test suite + helps us fix the bugs as soon as they are introduced. + +** Class Library Tests + + All classes in Mono libraries should have comprehensive unit test + suites to go with them. Unit testing is a software engineering + methodology that makes it easier to build correct code. Every + method in every class should have a set of tests to verify + that they work correctly. Mono also needs a testing framework + to make it easy to write and run lots of tests. + + +** Getting started + + If you are new to writing NUnit tests, there is a template you may use + to help get started. The file is: + + <b>mcs/class/doc/TemplateTest.cs</b> + + Save a copy of this file in the appropriate test subdirecty + (see below), and replace all the [text] markers with + appropriate code. Comments in the template are there to guide + you. You should also look at existing tests to see how other + people have written them. + mcs/class/corlib/Test/System.Collections/CollectionBaseTest.cs + is a small one that might help. + + The directory that will contain your new file depends on the + assembly/namespace of the class for which you are creating the + tests. Under mcs/class there is a directory for each + assembly. In each assembly there is a Test directory, + e.g. mcs/class/corlib/Test. In the Test directory there are + sub-directories for each namespace in the assembly, + e.g. mcs/class/corlib/Test/Sytem. Put your new test file in + the appropriate sub-directory under Test for the class you are + testing. + + Once your test class is complete, you need to add it to the + AllTests.cs file in the same directory as your new test. Add a + call to "suite.AddTest()" passing the name of your new test + class's suite property as the parameter. You will see + examples in the AllTests.cs file, so just copy and paste + inside there. + + Once all of that is done, you can do a 'make test' from the top mcs + directory. Your test class will be automagically included in the + build and the tests will be run along with all the others. + +* Tips on writing Unit tests. + + You should look at the NUnit documentation, as it is a + fantastic product, and includes fantastic documentation, but + here are some tips for those of you who are already reading + this web page. + + +** Provide an unique error message for Assert() + + Include an unique message for each Assert() so that when the assert + fails, it is trivial to locate the failing one. Otherwise, it may be + difficult to determine which part of the test is failing. A good way + to ensure unique messages is to use something like #A01, #A02 etc. + + Ok: + <pre> + + AssertEquals("array match", compare[0], i1[0]); + AssertEquals("array match", compare[1], i1[1]); + AssertEquals("array match", compare[2], i1[2]); + AssertEquals("array match", compare[3], i1[3]); + </pre> + + Excellent: + <pre> + AssertEquals("#A01", compare[0], i1[0]); + AssertEquals("#A02", compare[1], i1[1]); + AssertEquals("#A03", compare[2], i1[2]); + AssertEquals("#A04", compare[3], i1[3]); + </pre> + + Once you used such a number in an Assert(), don't change it later on - + people might use it it identify the test in bug reports or in mailing + lists. + +** Use AssertEquals() to compare things, not Assert(). + + Do not compare two values with Assert() - if the test fails, + people have no idea what went wrong while AssertEquals() + reports the failed value. + + Ok: + <pre> + Assert ("A01", myTicks[0] == t1.Ticks); + </pre> + + Excellent: + <pre> + AssertEquals ("A01", myTicks[0], t1.Ticks); + </pre> + +** Constructors + + When writing your testcase, please make sure to provide a constructor + which takes no arguments: + + <pre> + public class DateTimeTest : TestCase + { + + public DateTimeTest() : base ("[MonoTests.System.DateTimeTest]") {} + public DateTimeTest (string name): base(name) {} + + public static ITest Suite + { + get { + TestSuite suite = new TestSuite (); + return suite; + } + } + } + </pre> + +** Namespace + + Please keep the namespace within each test directory consistent - all + tests which are referenced in the same AllTests.cs must be in the same + namespace. Of course you can use subnamespaces as you like - + especially for subdirectories of your testsuite. + + For instance, if your AllTests.cs is in namespace "MonoTests" and you + have a subdirectory called "System", you can put all the tests in that + dir into namespace "MonoTests.System". + +** Test your test with the Microsoft runtime + + If possible, try to run your testsuite with the Microsoft runtime on + Windows and make sure all tests in it pass. This is especially + important if you're writing a totally new testcase - without this + check you can never be sure that your testcase contains no bugs .... + + Don't worry if you're writing your test on Linux, other people can + test it for you on Windows. + + Sometimes you may discover that a test doesn't show the expected + result when run with the Microsoft runtime - either because there is a + bug in their runtime or something is misleading or wrong in their + documentation. In this case, please put a detailed description of the + problem to mcs/class/doc/API-notes and do also report it to the list - + we'll forward this to the Microsoft people from time to time to help + them fix their documentation and runtime. + +** Unit tests. + + Why do unit testing? It becomes simple to run automated tests + for the whole library. Unit tests are a safety net - you can + change part of the code and verify that you haven't broken + anything. Ideally, tests are written before the actual library + code itself. And every time a bug is discovered, a test should + be written to demonstrate the bug and its fix. Then, if + you ever reintroduce the bug, you will know immediately. For + more info, read <a + href="http://junit.sourceforge.net/doc/testinfected/testing.htm"> + JUnit Test Infected: Programmers Love Writing Tests</a>. + + +** Getting Started + + We welcome all contributions to the Class Libary Test Suite. + + There is information to help you get started in CVS at + mcs/class/doc/NUnitGuidelines. Once you have written your test, please + post it to <a href="mailing-lists.html">mono-list</a>. + + Someone will make sure to add the file or apply the patch as + appropriate. If you plan to be an on-going contributor and + would like to get cvs account, email <a href="mailto:miguel@ximian.com">miguel</a>. + + Normally, after you send a couple of well-written new files + and/or patches to the list, you will be given cvs access. + diff --git a/web/thanks b/web/thanks new file mode 100644 index 00000000000..5f2df36f9cd --- /dev/null +++ b/web/thanks @@ -0,0 +1,6 @@ +* Thanks + + We would like to thank Tim O'Reilly, Brian Jepson and Nathan + Torkington for their help. + + Dave Winer for provided interesting comments and a to read. diff --git a/web/todo b/web/todo new file mode 100644 index 00000000000..abae8cdfb40 --- /dev/null +++ b/web/todo @@ -0,0 +1 @@ +Discuss with write new JIT
\ No newline at end of file diff --git a/web/tools b/web/tools new file mode 100644 index 00000000000..eabef48bb88 --- /dev/null +++ b/web/tools @@ -0,0 +1,67 @@ +* Tools + + We need a number of tools to make people productive using a + Mono-based solution. Some of these tools can be developed on + Windows before Mono is fully finished. + + All of these tools should be written using C#. + + For the tools that are typically command line tools: Try to + write these as components that could load their input from + streams or collections of streams, and implement the command + line tools as wrappers around those classes. + + For example, we will be making the C# compiler a component + that could be reused by applications that might have a use for + the various bits of the compiler (either to embed the + compiler, or reuse the code generator part of it). + + This is important so that these components (compiler, + assembler, linker, etc) can be integrated later into the + visual development environment (hopefully with the help of the + SharpDevelop hackers). + +TODO=ilasm,IL Assembler +** IL Assembler. + + This assembler should basically take as input a file + containing IL bytecodes as specified in the `Partition II' of + the ECMA spec, and produce a binary file. + +TODO=al,Assembly Linker +** Assembly Linker. + + This tool is used to construct assemblies, which are basically + deployment units for CLI executables. + +TODO=debugger,Debugger +** Debugger + + We will need a debugging API to debug CLI applications and + then a debugger component that can be used in an IDE + environment. + +TODO=ide,Integrated Development Environment +** Integrated Development Environment + + There is already a project to create a C# development + environment: <a + href="http://www.icsharpcode.net/OpenSource/SD/default.asp">SharpDevelop</a>. + People should work with the SharpDevelop hackers to produce a + unified development environment. + + Please work with the SharpDevelop hackers to build a good IDE. + We will work on creating an embedable compiler component and + an embeddable debugger component that can be used withing + SharpDevelop + +TODO=hbrowser,Help Browser +** Help Browser + + We need a good help browser that can be used to browse + documentation. Ideally this help browser can accept as input + XML Docbook input and an assorted set of file formats + (Microsoft Help, Unix manual pages, Unix Info pages) + + Look at the GNOME DevHelp for a good set of ideas on how to + implement this.
\ No newline at end of file diff --git a/web/web/.cvsignore b/web/web/.cvsignore new file mode 100644 index 00000000000..a023a6f9c7c --- /dev/null +++ b/web/web/.cvsignore @@ -0,0 +1,2 @@ +*.src +*.html diff --git a/web/web/commands b/web/web/commands new file mode 100644 index 00000000000..23a49c4bca7 --- /dev/null +++ b/web/web/commands @@ -0,0 +1,63 @@ +0,Home,index.html,index.src +1,FAQ,faq.html,faq.src +0,Mono,rationale.html,rationale.src +1,Runtime,runtime.html,runtime.src +2,Embedding,embedded-api.html,embedded-api.src +1,Classes,class-library.html,class-library.src +1,Gtk#,gtk-sharp.html,gtk-sharp.src +1,ASP.NET,asp-net.html,asp-net.src +1,ADO.NET,ado-net.html,ado-net.src +1,C# Compiler,c-sharp.html,c-sharp.src +1,VB Compiler,mbas.html,mbas.src +0,Download,download.html,download.src +1,CVS access,ccvs.html,ccvs.src +1,AnonCVS access,anoncvs.html,anoncvs.src +0,Contributing,contributing.html,contributing.src +1,Hackers,hackers.html,hackers.src +1,Documentation,documentation.html,documentation.src +1,Class Docs,classlib-doc.html,classlib-doc.src +1,Doc format,monodoc-xml.html,monodoc-xml.src +1,Test Suite,testing.html,testing.src +1,Tools,tools.html,tools.src +1,Porting,porting.html,porting.src +2,PowerPC,ppc.html,ppc.src +1,HOWTO,mono-contribution-howto.html,mono-contribution-howto.src +0,Resources,resources.html,resources.src +1,Beginning,mono-beginning.html,mono-beginning.src +1,Mailing Lists,mailing-lists.html,mailing-lists.src +1,Ideas,ideas.html,ideas.src +1,Passport,passport.html,passport.src +1,Books,books.html,books.src +1,Papers,papers.html,papers.src +1,Languages,languages.html,languages.src +1,Debugging,jit-debug.html,jit-debug.src +0,Plans,plans.html,plans.src +1,ADO.NET,ado-net.html,ado-net.src +2,Firebird Interbase,firebird.html,firebird.src +2,IBM DB2,ibmdb2.html,ibmdb2.src +2,Microsft SQL Server,sqlclient.html,sqlclient.src +2,MySQL,mysql.html,mysql.src +2,ODBC,odbc.html,odbc.src +2,OLE DB,oledb.html,oledb.src +2,Oracle,oracle.html,oracle.src +2,PostgreSQL,postgresql.html,postgresql.src +2,SQL Lite,sqlite.html,sqlite.src +2,Sybase,sybase.html,sybase.src +2,TDS Generic,tdsclient.html,tdsclient.src +1,Crypto,crypto.html,crypto.src +1,Java,java.html,java.src +1,Windows.Forms,winforms.html,winforms.src +0,Class Status,class-status.html,class-status.src,cm/cormissing.css,cm/cormissing.js +1,corlib,class-status-corlib.html,class-status-corlib.src,cm/cormissing.css,cm/cormissing.js +1,System,class-status-System.html,class-status-System.src,cm/cormissing.css,cm/cormissing.js +1,Xml,class-status-System.Xml.html,class-status-System.Xml.src,cm/cormissing.css,cm/cormissing.js +1,Data,class-status-System.Data.html,class-status-System.Data.src,cm/cormissing.css,cm/cormissing.js +1,Drawing,class-status-System.Drawing.html,class-status-System.Drawing.src,cm/cormissing.css,cm/cormissing.js +1,Web,class-status-System.Web.html,class-status-System.Web.src,cm/cormissing.css,cm/cormissing.js +1,Web.Services,class-status-System.Web.Services.html,class-status-System.Web.Services.src,cm/cormissing.css,cm/cormissing.js +1,Microsoft.VisualBasic,class-status-Microsoft.VisualBasic.html,class-status-Microsoft.VisualBasic.src,cm/cormissing.css,cm/cormissing.js +1,Windows.Forms,class-status-System.Windows.Forms.html,class-status-System.Windows.Forms.src,cm/cormissing.css,cm/cormissing.js +1,EnterpriseServices,class-status-System.EnterpriseServices.html,class-status-System.EnterpriseServices.src,cm/cormissing.css,cm/cormissing.js +1,Formatters.Soap,class-status-System.Runtime.Serialization.Formatters.Soap.html,class-status-System.Runtime.Serialization.Formatters.Soap.src,cm/cormissing.css,cm/cormissing.js +1,Cscompmgd,class-status-Cscompmgd.html,class-status-Cscompmgd.src,cm/cormissing.css,cm/cormissing.js +0,Contact,contact.html,contact.src diff --git a/web/web/deploy/.cvsignore b/web/web/deploy/.cvsignore new file mode 100755 index 00000000000..2d19fc766d9 --- /dev/null +++ b/web/web/deploy/.cvsignore @@ -0,0 +1 @@ +*.html diff --git a/web/web/deploy/cm/c.gif b/web/web/deploy/cm/c.gif Binary files differnew file mode 100644 index 00000000000..02c347efd0b --- /dev/null +++ b/web/web/deploy/cm/c.gif diff --git a/web/web/deploy/cm/cormissing.css b/web/web/deploy/cm/cormissing.css new file mode 100644 index 00000000000..1f22da54273 --- /dev/null +++ b/web/web/deploy/cm/cormissing.css @@ -0,0 +1,182 @@ +.y IMG +{ + border: 0px; + padding: 0px; + margin: 0px; + margin-right: 4px; + vertical-align: middle; +} + +.y, .y_, +.n, .n_, +.c, .c_, +.c, .c_, +.d, .d_, +.en, .en_, +.i, .i_, +.s, .s_, +.e, .e_, +.f, .f_, +.m, .m_, +.o, .o_, +.p, .p_, +.r, .r_, +.x, .x_ +{ + FONT: 10px 'Verdana'; + margin-left: 20px; +} + +.y_ .n, +.y_ .n_, +.n_ .c, +.n_ .c_, +.n_ .s, +.n_ .s_, +.n_ .d, +.n_ .d_, +.n_ .en, +.n_ .en_, +.n_ .i, +.n_ .i_, +.c_ .c, +.c_ .c_, +.c_ .e, +.c_ .e_, +.c_ .f, +.c_ .f_, +.c_ .m, +.c_ .m_, +.c_ .o, +.c_ .o_, +.c_ .p, +.c_ .p_, +.c_ .r, +.c_ .r_, +.c_ .x, +.c_ .x_, +.c_ .i, +.c_ .i_, +.d_ .c, +.d_ .c_, +.d_ .e, +.d_ .e_, +.d_ .f, +.d_ .f_, +.d_ .m, +.d_ .m_, +.d_ .o, +.d_ .o_, +.d_ .p, +.d_ .p_, +.d_ .r, +.d_ .r_, +.d_ .x, +.d_ .x_, +.en_ .c, +.en_ .c_, +.en_ .e, +.en_ .e_, +.en_ .f, +.en_ .f_, +.en_ .m, +.en_ .m_, +.en_ .o, +.en_ .o_, +.en_ .p, +.en_ .p_, +.en_ .r, +.en_ .r_, +.en_ .x, +.en_ .x_, +.i_ .c, +.i_ .c_, +.i_ .e, +.i_ .e_, +.i_ .f, +.i_ .f_, +.i_ .m, +.i_ .m_, +.i_ .o, +.i_ .o_, +.i_ .p, +.i_ .p_, +.i_ .r, +.i_ .r_, +.i_ .x, +.i_ .x_, +.i_ .i, +.i_ .i_, +.s_ .c, +.s_ .c_, +.s_ .e, +.s_ .e_, +.s_ .f, +.s_ .f_, +.s_ .m, +.s_ .m_, +.s_ .o, +.s_ .o_, +.s_ .p, +.s_ .p_, +.s_ .r, +.s_ .r_, +.s_ .x, +.s_ .x_, +.s_ .i, +.s_ .i_, + +.e_ .r, +.e_ .r_, +.e_ .o, +.e_ .o_, +.f_ .r, +.f_ .r_, +.f_ .o, +.f_ .o_, +.m_ .r, +.m_ .r_, +.m_ .o, +.m_ .o_, +.o_ .r, +.o_ .r_, +.o_ .o, +.o_ .o_, +.p_ .r, +.p_ .r_, +.p_ .o, +.p_ .o_, +.r_ .r, +.r_ .r_, +.r_ .o, +.r_ .o_, +.x_ .r, +.x_ .r_, +.x_ .o, +.x_ .o_ +{ + display: none; +} + +.t +{ + cursor: pointer; + margin-right: 8px; +} + +.filter +{ + cursor: pointer; + vertical-align: middle; +} + + +.st +{ + margin-left: 20px; +} + +.l +{ + cursor: pointer; +} diff --git a/web/web/deploy/cm/cormissing.js b/web/web/deploy/cm/cormissing.js new file mode 100644 index 00000000000..e6b12ac4fd2 --- /dev/null +++ b/web/web/deploy/cm/cormissing.js @@ -0,0 +1,392 @@ +function toggle (elt) +{ + if (elt == null) + return; + + var eltLink = elt.firstChild; + if (eltLink != null && eltLink.className == 't') // toggle + { + var ich = elt.className.indexOf ('_'); + if (ich < 0) + { + eltLink.src = 'cm/tp.gif'; + elt.className += '_'; + } + else + { + eltLink.src = 'cm/tm.gif'; + elt.className = elt.className.slice (0, ich); + } + } +} + +function setView (elt, fView) +{ + var eltLink = elt.firstChild; + if (eltLink != null && eltLink.className == 't') // toggle + { + var ich = elt.className.indexOf ('_'); + if (ich < 0 && !fView) + { + eltLink.src = 'cm/tp.gif'; + elt.className += '_'; + } + else if (ich >= 0 && fView) + { + eltLink.src = 'cm/tm.gif'; + elt.className = elt.className.slice (0, ich); + } + } +} + +function trimSrc (strSrc) +{ + return strSrc.slice (strSrc.lastIndexOf ('/') + 1, strSrc.lastIndexOf ('.')); +} + +function getChildrenByTagName (elt, strTag) +{ + strTag = strTag.toLowerCase (); + var rgChildren = new Array (); + var eltChild = elt.firstChild; + while (eltChild) + { + if (eltChild.tagName && eltChild.tagName.toLowerCase () == strTag) + rgChildren.push (eltChild); + eltChild = eltChild.nextSibling; + } + return rgChildren; +} + +function viewAll (elt, dictTypes) +{ + var fView = false; + var rgImages = getChildrenByTagName (elt, 'IMG'); + var cImages = rgImages.length; + for (var iImage = 0; iImage < cImages; iImage++) + { + var strImage = trimSrc (rgImages [iImage].src); + if (dictTypes [strImage]) + { + fView = true; + break; + } + } + var rgElts = getChildrenByTagName (elt, 'DIV'); + var cElts = rgElts.length; + if (cElts != 0) + { + var iElt; + for (iElt = 0; iElt < cElts; iElt ++) + fView |= viewAll (rgElts [iElt], dictTypes); + } + elt.style.display = fView ? '' : 'none'; + return fView; +} + +function getView (elt) +{ + var eltLink = elt.firstChild; + if (eltLink != null && eltLink.className == 't') // toggle + { + var ich = elt.className.indexOf ('_'); + if (ich < 0) + return true; + } + return false; +} + +function getParentDiv (elt) +{ + if (elt) + { + do + { + elt = elt.parentNode; + } + while (elt && elt.tagName != 'DIV'); + } + + return elt; +} + +function getName (elt) +{ + var rgSpans = getChildrenByTagName (elt, 'SPAN'); + for (var iSpan = 0; iSpan < rgSpans.length; iSpan ++) + { + var span = rgSpans [iSpan]; + if (span.className == 'l') // label + { + if (span.innerText) + return span.innerText; + else + return span.firstChild.nodeValue; + } + } + return null; +} + +function clickHandler (evt) +{ + var elt; + if (document.layers) + elt = evt.taget; + else if (window.event && window.event.srcElement) + { + elt = window.event.srcElement; + evt = window.event; + } + else if (evt && evt.stopPropagation) + elt = evt.target; + + if (!elt.className && elt.parentNode) + elt = elt.parentNode; + + if (elt.className == 'l') // label + { + var strClass; + var strField; + var strNamespace; + var strAssembly; + + elt = getParentDiv (elt); + var strEltClass = elt.className; + if (strEltClass.charAt (strEltClass.length - 1) == '_') + strEltClass = strEltClass.slice (0, strEltClass.length - 1); + + if (strEltClass == 'x') // constructor + { + strField = 'ctor'; + elt = getParentDiv (elt); + } + else + if (strEltClass == 'm' || // method + strEltClass == 'p' || // property + strEltClass == 'e' || // event + strEltClass == 'f') // field + { + strField = getName (elt).toLowerCase (); + var match = strField.match ( /[\.A-Z0-9_]*/i ); + if (match) + strField = match [0]; + elt = getParentDiv (elt); + + } + + var strEltClass = elt.className; + if (strEltClass.charAt (strEltClass.length - 1) == '_') + strEltClass = strEltClass.slice (0, strEltClass.length - 1); + + if (strEltClass == 'c' || // class + strEltClass == 's' || // struct + strEltClass == 'i' || // struct + strEltClass == 'd' || // delegate + strEltClass == 'en') // enum + { + strClass = getName (elt); + if (strEltClass == 'en') + strField = null; + elt = getParentDiv (elt); + } + + var strEltClass = elt.className; + if (strEltClass.charAt (strEltClass.length - 1) == '_') + strEltClass = strEltClass.slice (0, strEltClass.length - 1); + + if (strEltClass == 'n') + { + strNamespace = getName (elt); + elt = getParentDiv (elt); + } + + var strEltClass = elt.className; + if (strEltClass.charAt (strEltClass.length - 1) == '_') + strEltClass = strEltClass.slice (0, strEltClass.length - 1); + + if (strEltClass == 'y') + { + strAssembly = getName (elt); + } + + if (evt.ctrlKey) + { + var strRoot = 'http://cvs.hispalinux.es/cgi-bin/cvsweb/mcs/class/'; + var strExtra = '?cvsroot=Mono'; + + if (strAssembly) + { + strRoot = strRoot + strAssembly + '/'; + if (strNamespace) + { + strRoot = strRoot + strNamespace + '/'; + if (strClass) + { + strRoot += strClass + '.cs'; + strExtra += '&rev=1'; + } + } + window.open (strRoot + strExtra, 'CVS'); + } + } + else if (strNamespace) + { + var re = /\./g ; + strNamespace = strNamespace.toLowerCase ().replace (re, ''); + if (strClass) + strNamespace += strClass.toLowerCase () + 'class'; + if (strField) + strNamespace += strField; + if (strClass || strField) + strNamespace += 'topic'; + + window.open ('http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrf' + strNamespace + '.asp', 'MSDN'); + } + } + else + { + if (elt.parentNode && elt.parentNode.className == 't') // toggle + elt = elt.parentNode; + else if (elt.className != 't') // toggle + return; + + while (elt != null && elt.tagName != 'DIV') + elt = elt.parentNode; + + if (evt.shiftKey) + { + var rgElts = getChildrenByTagName (elt, 'DIV'); + var cElts = rgElts.length; + if (cElts != 0) + { + var fView = false; + var iElt; + for (iElt = 0; iElt < cElts; iElt ++) + { + if (getView (rgElts [iElt])) + { + fView = true; + break; + } + } + for (iElt = 0; iElt < cElts; iElt ++) + { + setView (rgElts [iElt], !fView); + } + } + } + else if (evt.ctrlKey) + { + setView (elt, true); + var eltParent = getParentDiv (elt); + while (eltParent) + { + var rgSiblings = getChildrenByTagName (eltParent, 'DIV'); + var cSiblings = rgSiblings.length; + for (var iSibling = 0; iSibling < cSiblings; iSibling++) + { + var eltSibling = rgSiblings [iSibling]; + if (eltSibling != elt) + { + setView (eltSibling, false); + } + } + elt = eltParent; + eltParent = getParentDiv (elt); + } + } + else + toggle (elt); + } + + return false; +} + +function filterTree () +{ + var eltMissing = document.getElementById ('missing'); + var eltTodo = document.getElementById ('todo'); + var eltExtra = document.getElementById ('extra'); + var eltErrors = document.getElementById ('errors'); + + var dictTypes = new Object (); + if (eltMissing.checked) + dictTypes ['sm'] = true; + if (eltTodo.checked) + dictTypes ['st'] = true; + if (eltErrors.checked) + dictTypes ['se'] = true; + if (eltExtra.checked) + dictTypes ['sx'] = true; +// dictTypes ['sc'] = true; + + viewAll (document.getElementById ('ROOT'), dictTypes); +} + +function selectMissing () +{ + toggleFilter ('missing'); +} + +function selectTodo () +{ + toggleFilter ('todo'); +} + +function selectExtra () +{ + toggleFilter ('extra'); +} + +function selectErrors () +{ + toggleFilter ('errors'); +} + +function toggleFilter (strFilter) +{ + var eltTodo = document.getElementById ('todo'); + var eltMissing = document.getElementById ('missing'); + var eltExtra = document.getElementById ('extra'); + var eltErrors = document.getElementById ('errors'); + + var eltToggle = document.getElementById (strFilter); + if (window && window.event && window.event.shiftKey) + { + eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = false; + eltToggle.checked = true; + } + else + if (!eltTodo.checked && !eltMissing.checked && !eltExtra.checked && !eltErrors.checked) + { + eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = true; + eltToggle.checked = false; + } + filterTree (); +} + +function onLoad () +{ + var eltMissing = document.getElementById ('missing'); + var eltTodo = document.getElementById ('todo'); + var eltExtra = document.getElementById ('extra'); + var eltErrors = document.getElementById ('errors'); + eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = true; +} + +if (document.layers) +{ + document.captureEvents (Event.MOUSEUP); + document.onmouseup = clickHandler; +} +else if (document.attachEvent) +{ + document.attachEvent('onclick', clickHandler); +} +else if (document.addEventListener) +{ + document.addEventListener('click', clickHandler, false); +} +else + document.onclick = clickHandler; + diff --git a/web/web/deploy/cm/d.gif b/web/web/deploy/cm/d.gif Binary files differnew file mode 100644 index 00000000000..c9735952f33 --- /dev/null +++ b/web/web/deploy/cm/d.gif diff --git a/web/web/deploy/cm/e.gif b/web/web/deploy/cm/e.gif Binary files differnew file mode 100644 index 00000000000..1137246bfae --- /dev/null +++ b/web/web/deploy/cm/e.gif diff --git a/web/web/deploy/cm/en.gif b/web/web/deploy/cm/en.gif Binary files differnew file mode 100644 index 00000000000..00026b77300 --- /dev/null +++ b/web/web/deploy/cm/en.gif diff --git a/web/web/deploy/cm/f.gif b/web/web/deploy/cm/f.gif Binary files differnew file mode 100644 index 00000000000..f78a2f53bbc --- /dev/null +++ b/web/web/deploy/cm/f.gif diff --git a/web/web/deploy/cm/i.gif b/web/web/deploy/cm/i.gif Binary files differnew file mode 100644 index 00000000000..56cd032a565 --- /dev/null +++ b/web/web/deploy/cm/i.gif diff --git a/web/web/deploy/cm/m.gif b/web/web/deploy/cm/m.gif Binary files differnew file mode 100644 index 00000000000..75fe3586d48 --- /dev/null +++ b/web/web/deploy/cm/m.gif diff --git a/web/web/deploy/cm/n.gif b/web/web/deploy/cm/n.gif Binary files differnew file mode 100644 index 00000000000..f6fa746304d --- /dev/null +++ b/web/web/deploy/cm/n.gif diff --git a/web/web/deploy/cm/p.gif b/web/web/deploy/cm/p.gif Binary files differnew file mode 100644 index 00000000000..b79d0dd7edb --- /dev/null +++ b/web/web/deploy/cm/p.gif diff --git a/web/web/deploy/cm/r.gif b/web/web/deploy/cm/r.gif Binary files differnew file mode 100644 index 00000000000..a3ef0f38ef0 --- /dev/null +++ b/web/web/deploy/cm/r.gif diff --git a/web/web/deploy/cm/s.gif b/web/web/deploy/cm/s.gif Binary files differnew file mode 100644 index 00000000000..f2fd5c8aee2 --- /dev/null +++ b/web/web/deploy/cm/s.gif diff --git a/web/web/deploy/cm/sc.gif b/web/web/deploy/cm/sc.gif Binary files differnew file mode 100644 index 00000000000..b02afd9b2e0 --- /dev/null +++ b/web/web/deploy/cm/sc.gif diff --git a/web/web/deploy/cm/se.gif b/web/web/deploy/cm/se.gif Binary files differnew file mode 100644 index 00000000000..1c46eaa5887 --- /dev/null +++ b/web/web/deploy/cm/se.gif diff --git a/web/web/deploy/cm/sm.gif b/web/web/deploy/cm/sm.gif Binary files differnew file mode 100644 index 00000000000..0c7194786d5 --- /dev/null +++ b/web/web/deploy/cm/sm.gif diff --git a/web/web/deploy/cm/st.gif b/web/web/deploy/cm/st.gif Binary files differnew file mode 100644 index 00000000000..067582cb398 --- /dev/null +++ b/web/web/deploy/cm/st.gif diff --git a/web/web/deploy/cm/sx.gif b/web/web/deploy/cm/sx.gif Binary files differnew file mode 100644 index 00000000000..2c8ca547929 --- /dev/null +++ b/web/web/deploy/cm/sx.gif diff --git a/web/web/deploy/cm/tb.gif b/web/web/deploy/cm/tb.gif Binary files differnew file mode 100644 index 00000000000..ee68c5a356b --- /dev/null +++ b/web/web/deploy/cm/tb.gif diff --git a/web/web/deploy/cm/tm.gif b/web/web/deploy/cm/tm.gif Binary files differnew file mode 100644 index 00000000000..3c8f18aecea --- /dev/null +++ b/web/web/deploy/cm/tm.gif diff --git a/web/web/deploy/cm/tp.gif b/web/web/deploy/cm/tp.gif Binary files differnew file mode 100644 index 00000000000..8b7435361b7 --- /dev/null +++ b/web/web/deploy/cm/tp.gif diff --git a/web/web/deploy/cm/y.gif b/web/web/deploy/cm/y.gif Binary files differnew file mode 100644 index 00000000000..08f00d4ea11 --- /dev/null +++ b/web/web/deploy/cm/y.gif diff --git a/web/web/deploy/images/bgsquares.gif b/web/web/deploy/images/bgsquares.gif Binary files differnew file mode 100644 index 00000000000..864bcd44038 --- /dev/null +++ b/web/web/deploy/images/bgsquares.gif diff --git a/web/web/deploy/images/bgsquares.png b/web/web/deploy/images/bgsquares.png Binary files differnew file mode 100644 index 00000000000..a9e2bb94dbb --- /dev/null +++ b/web/web/deploy/images/bgsquares.png diff --git a/web/web/deploy/images/bgsquares.xcf.gz b/web/web/deploy/images/bgsquares.xcf.gz Binary files differnew file mode 100644 index 00000000000..200b5805615 --- /dev/null +++ b/web/web/deploy/images/bgsquares.xcf.gz diff --git a/web/web/deploy/images/mono.gif b/web/web/deploy/images/mono.gif Binary files differnew file mode 100644 index 00000000000..298976a07b7 --- /dev/null +++ b/web/web/deploy/images/mono.gif diff --git a/web/web/deploy/images/mono.png b/web/web/deploy/images/mono.png Binary files differnew file mode 100644 index 00000000000..21709009d60 --- /dev/null +++ b/web/web/deploy/images/mono.png diff --git a/web/web/deploy/images/pixel.gif b/web/web/deploy/images/pixel.gif Binary files differnew file mode 100644 index 00000000000..a4f37d7e02e --- /dev/null +++ b/web/web/deploy/images/pixel.gif diff --git a/web/web/deploy/images/pixel.png b/web/web/deploy/images/pixel.png Binary files differnew file mode 100644 index 00000000000..85cfd14929a --- /dev/null +++ b/web/web/deploy/images/pixel.png diff --git a/web/web/htmlify b/web/web/htmlify new file mode 100644 index 00000000000..e4e61961f3b --- /dev/null +++ b/web/web/htmlify @@ -0,0 +1,33 @@ +#!/usr/bin/perl +$q = 1; + +while (<>){ + chop; + if (/^\* (.*)$/){ + print "<h1>$1</h1>\n"; + } elsif (/^\*\* (.*)$/) { + print "<h2>$1</h2>\n"; + } elsif (/^\*\*\* (.*)$/) { + print "<h3>$1</h3>\n"; + } elsif (/^\*\*\*\* (.*)$/) { + print "<h4>$1</h4>\n"; + } elsif (/^$/) { + print "<p>\n"; + } elsif (/^\t\t\* (.*)$/) { + print "<li>$1\n"; + } elsif (/^\@item (.*)$/){ + $name = $link = $1; + $link =~ s/ //g; + print "<a name=\"$link\">\n"; + print "<h2>$name</h2>\n"; + } elsif (/^Q: (.*)$/){ + print "<p><a name=\"q$q\"></a><b>Question $q:</b> $1\n"; + $q++; + } elsif (/^A: (.*)$/){ + print "$1\n"; + } elsif (/^TODO=(.*),$/){ + print "<a name=\"$1\">\n"; + } else { + print "$_\n"; + } +} diff --git a/web/web/icaza.pl b/web/web/icaza.pl new file mode 100644 index 00000000000..ce8b87c44da --- /dev/null +++ b/web/web/icaza.pl @@ -0,0 +1,76 @@ +#!/usr/bin/perl +$q = 1; + +# Modified by Edwin Lima (edwinlima@hotmail.com; edwin.lima@nec-computers.com) +# Date: 08/21/01, The Netherlands +# $f: Variable used as a flag to create the list of questions on top of the question-answers set. This +# is the only way that I found to scan the questions which have a <CR><LF>, in such a way that I will not +# scan the answer together at same time. +# @aname: Buffer used to store the question-answers set to print them out just after the print of the +# questions. +# @href: Buffer used to store the anchors (only questions) to the questions-answers set on the bottom +# of the page. +# I opened explicitly the file for input (input.txt) but U can change this as it was originally. +# +# + +#comment this line if you are not open the file explicitly +#open(IN, "input.txt") || die "cannot open file input.txt" ; + +print("<A name=TOP>") ; + +#Uncomment line bellow to make it work as it was originally. +while (<>){ + +#comment line bellow + +#while (<IN>){ + chop; + if (/^\* (.*)$/){ + push(@aname,"<h1>$1</h1>\n"); +# print $body; + } elsif (/^\*\* (.*)$/) { + push(@aname, "<h2>$1</h2>\n"); + push(@href, "<h2>$1</h2>\n"); + } elsif (/^\*\*\* (.*)$/) { + push(@aname, "<h3>$1</h3>\n"); + + } elsif (/^$/) { + push(@aname, "<p>\n"); +# push(@href, "<p>\n"); NOT NEEDED + } elsif (/^\t\t\* (.*)$/) { + push(@aname, "<li>$1\n"); + } elsif (/^Q: (.*)$/){ + push(@aname, "<p><a name=\"q$q\"></a><b>Question $q:</b> $1\n"); + push(@href,"<p><a href=\"#q$q\"><b>Question $q:</b></a> $1\n"); + $f=1; + $q++; + } elsif (/^A: (.*)$/){ + push(@aname,"<P>\n<A HREF=#TOP>Top</A>\n<P>"); + push(@aname,"$1\n"); + $f=0; + } elsif (/^TODO=(.*),$/){ + push(@aname, "<a name=\"$1\">\n"); + #push(@href, "<a name=\"$1\">\n"); + } else { + push(@aname,"$_\n"); + if ($f==1) { + push(@href,"$_\n"); + } + } +} + +foreach $line (@href) #"\n\n"; +{ + print $line; + } + +foreach $line (@aname) #"\n\n"; +{ + print $line; + } + + +#comment this line if you are not open the file explicitly +# close(IN) || die "cannot close file" ; + diff --git a/web/web/images/bgsquares.gif b/web/web/images/bgsquares.gif Binary files differnew file mode 100644 index 00000000000..864bcd44038 --- /dev/null +++ b/web/web/images/bgsquares.gif diff --git a/web/web/images/bgsquares.png b/web/web/images/bgsquares.png Binary files differnew file mode 100644 index 00000000000..54de2ad1e6d --- /dev/null +++ b/web/web/images/bgsquares.png diff --git a/web/web/images/bgsquares.xcf.gz b/web/web/images/bgsquares.xcf.gz Binary files differnew file mode 100644 index 00000000000..200b5805615 --- /dev/null +++ b/web/web/images/bgsquares.xcf.gz diff --git a/web/web/images/mono-new.gif b/web/web/images/mono-new.gif Binary files differnew file mode 100755 index 00000000000..9aa496940a8 --- /dev/null +++ b/web/web/images/mono-new.gif diff --git a/web/web/images/mono.gif b/web/web/images/mono.gif Binary files differnew file mode 100644 index 00000000000..298976a07b7 --- /dev/null +++ b/web/web/images/mono.gif diff --git a/web/web/images/mono.png b/web/web/images/mono.png Binary files differnew file mode 100644 index 00000000000..a19e38acedd --- /dev/null +++ b/web/web/images/mono.png diff --git a/web/web/images/pixel.gif b/web/web/images/pixel.gif Binary files differnew file mode 100644 index 00000000000..a4f37d7e02e --- /dev/null +++ b/web/web/images/pixel.gif diff --git a/web/web/images/pixel.png b/web/web/images/pixel.png Binary files differnew file mode 100644 index 00000000000..d8f33a2a3e4 --- /dev/null +++ b/web/web/images/pixel.png diff --git a/web/web/images/xml.gif b/web/web/images/xml.gif Binary files differnew file mode 100755 index 00000000000..ecb09575418 --- /dev/null +++ b/web/web/images/xml.gif diff --git a/web/web/makefile b/web/web/makefile new file mode 100644 index 00000000000..5a037d1cc16 --- /dev/null +++ b/web/web/makefile @@ -0,0 +1,152 @@ +CSCRIPT = $(SYSTEMROOT)/system32/cscript.exe +CSC=csc + +CORCOMPARE=../../../mcs/tools/corcompare + +OBJECTS= \ + deploy/ado-net.html \ + deploy/firebird.html \ + deploy/ibmdb2.html \ + deploy/mysql.html \ + deploy/odbc.html \ + deploy/oledb.html \ + deploy/oracle.html \ + deploy/postgresql.html \ + deploy/sqlclient.html \ + deploy/sqlite.html \ + deploy/sybase.html \ + deploy/tdsclient.html \ + deploy/anoncvs.html \ + deploy/asp-net.html \ + deploy/books.html \ + deploy/contributing.html \ + deploy/class-status.html \ + deploy/class-status-corlib.html \ + deploy/class-status-System.html \ + deploy/class-status-System.Xml.html \ + deploy/class-status-System.Drawing.html \ + deploy/class-status-System.Data.html \ + deploy/class-status-System.Web.html \ + deploy/class-status-System.Web.Services.html \ + deploy/class-status-Microsoft.VisualBasic.html \ + deploy/class-status-System.EnterpriseServices.html \ + deploy/class-status-System.Runtime.Serialization.Formatters.Soap.html \ + deploy/class-status-System.Windows.Forms.html \ + deploy/class-status-Cscompmgd.html \ + deploy/class-library.html \ + deploy/classlib-doc.html \ + deploy/contact.html \ + deploy/c-sharp.html \ + deploy/mbas.html \ + deploy/ccvs.html \ + deploy/documentation.html \ + deploy/download.html \ + deploy/crypto.html \ + deploy/embedded-api.html \ + deploy/faq.html \ + deploy/gcc-frontend.html \ + deploy/hackers.html \ + deploy/index.html \ + deploy/ideas.html \ + deploy/java.html \ + deploy/jit-debug.html \ + deploy/jit-debug-sample.html \ + deploy/jit-debug-sample2.html \ + deploy/languages.html \ + deploy/mailing-lists.html \ + deploy/mono-beginning.html \ + deploy/mono-contribution-howto.html \ + deploy/monodoc-xml.html \ + deploy/papers.html \ + deploy/passport.html \ + deploy/plans.html \ + deploy/porting.html \ + deploy/ppc.html \ + deploy/rationale.html \ + deploy/resources.html \ + deploy/roadmap.html \ + deploy/runtime.html \ + deploy/status.html \ + deploy/testing.html \ + deploy/tools.html \ + deploy/winforms.html +#2,Configuration.Install,class-status-System.Configuration.Install.html,class-status-System.Configuration.Install.src,cm/cormissing.css,cm/cormissing.js +#2,Runtime.Remoting,class-status-System.Runtime.Remoting.html,class-status-System.Runtime.Remoting.src,cm/cormissing.css,cm/cormissing.js + +# deploy/class-status-System.Configuration.Install.html \ +# deploy/class-status-System.Runtime.Remoting.html \ + +NON_HTML_SOURCES= \ + ../mono-build.sh \ + ../mono-build-w32.sh + + +all: $(OBJECTS) deploy/index.rss + perl process.pl commands template.html.in deploy + +tutorial: mono-beginning.html.stamp mono-beginning.pdf + cp -a mono-beginning mono-beginning.xml mono-beginning.pdf deploy + +mono-beginning.html.stamp: mono-beginning.xml + db2html mono-beginning.xml + touch mono-beginning.html.stamp + +mono-beginning.pdf: mono-beginning.xml + db2pdf mono-beginning.xml + +mono-beginning.xml: ../mono-beginning.xml + cp ../mono-beginning.xml . + +deploy/index.rss: mono-rss.exe ../index + ./mono-rss.exe ../index deploy/index.rss + +mono-rss.exe: mono-rss.cs rss.cs + $(CSC) mono-rss.cs rss.cs + +clean: + rm -f $(OBJECTS) $(patsubst deploy/%.html,src/%.src, $(OBJECTS)) src/*.xml src/*.html.in ../class-status-* ../class-status + +push: + cp -f $(NON_HTML_SOURCES) deploy + echo scp -P 2200 -r deploy/* www@www.ximian.com:/web/cvsmodules/mono + (cd deploy; rsync --verbose --recursive --checksum --update --rsh='ssh -p 2200' . www@www.ximian.com:/web/cvsmodules/mono ) + +push2: + scp -r deploy/* primates:public_html/xxx + +$(OBJECTS): $(patsubst deploy/%.html,src/%.src, $(OBJECTS)) + +#.PRECIOUS: $(patsubst deploy/%.html,src/%.src, $(OBJECTS)) + + + +.PRECIOUS: src/%.src +src/%.src: ../% commands makefile template.html.in + perl htmlify $< > $@ + + + +.PRECIOUS: ../class-status-% +../class-status-%: src/%.html.in ../class-status.in + cat ../class-status.in $< > $@ + + +.PRECIOUS: src/%.html.in +src/%.html.in: src/%.xml $(CORCOMPARE)/transform.js $(CORCOMPARE)/cormissing.xsl + $(CSCRIPT) /nologo $(CORCOMPARE)/transform.js $< $(CORCOMPARE)/cormissing.xsl > $@ + + + +.PRECIOUS: src/%.xml +src/%.xml: ../../../mcs/class/lib/%.dll $(CORCOMPARE)/CorCompare.exe + $(CORCOMPARE)/CorCompare.exe -x $@ $< + +src/corlib.xml: ../../../mcs/class/lib/corlib_cmp.dll $(CORCOMPARE)/CorCompare.exe + $(CORCOMPARE)/CorCompare.exe -f corlib -ms mscorlib -x $@ $< + + +../class-status: ../class-status.in + cp -f $< $@ + +make-rss: + $(CSC) make-rss.cs -o diff --git a/web/web/mono-rss.cs b/web/web/mono-rss.cs new file mode 100755 index 00000000000..a4fdd49c365 --- /dev/null +++ b/web/web/mono-rss.cs @@ -0,0 +1,103 @@ +// +// Generates the Mono RSS feed +// +// Miguel de Icaza +// +using System; +using System.IO; +using System.Xml; +using RSS; + +class X { + static RSS.RSS rss; + static Channel c; + static int item_count; + + static void PopulateRSS (StreamReader input) + { + string s; + + while ((s = input.ReadLine ()) != null){ + if (s.StartsWith ("@item ")) + break; + } + + if (s == null || !s.StartsWith ("@item ")){ + Console.WriteLine ("Could not find beginning of text to RSS"); + return; + } + + Item i = null; + string description = ""; + do { + if (s.StartsWith ("@item ")){ + if (item_count++ > 25) + break; + + if (i != null){ + i.Description = description; + description = ""; + } + + string title = s.Substring (6); + string link = "http://www.go-mono.com/index.html#"; + foreach (char ch in title){ + if (ch != ' ') + link += ch; + } + + i = c.NewItem (); + i.Title = title; + i.Link = link; + } else { + description += "\n" + (s == "\n" ? "<p>" : s); + } + } while ((s = input.ReadLine ()) != null); + + if (i != null){ + i.Description = description; + } + } + + static void MakeRSS (string input, string output) + { + rss = new RSS.RSS (); + c = rss.NewChannel ("Mono Project News", "http://www.go-mono.com"); + + c.Title = "Mono Project News"; + c.Link = "http://www.go-mono.com"; + c.Description = + "News from the Mono project: a portable implementation of the .NET Framework"; + c.WebMaster = "webmaster@go-mono.com"; + c.ManagingEditor = "miguel@ximian.com"; + string t = File.GetLastWriteTime (input).ToString ("r"); + c.PubDate = t; + c.LastBuildDate = t; + + using (FileStream fs = new FileStream (input, FileMode.Open)){ + using (StreamReader input_stream = new StreamReader (fs)){ + PopulateRSS (input_stream); + } + } + + rss.XmlDocument.Save (output); + } + + static int Main (string [] args) + { + switch (args.Length){ + case 0: + MakeRSS ("index", "index.rss"); + break; + case 2: + MakeRSS (args [0], args [1]); + break; + + default: + Console.WriteLine ("Usage is: mono-rss [input output.rss]"); + return 1; + } + + return 0; + } +} diff --git a/web/web/process.pl b/web/web/process.pl new file mode 100755 index 00000000000..48766f8f0b8 --- /dev/null +++ b/web/web/process.pl @@ -0,0 +1,89 @@ +#!/usr/bin/perl +# +# Author: +# Sean MacIsaac +# + +use strict; + +my $full_expand = 1; +my @template; +my $n; + +if ($#ARGV != 2) { + print "process.pl command_file template_file directory_prefix\n"; + exit (); +} + +my $menu = ""; + +open COMMANDS, $ARGV[0] || die "Can not open $ARGV[0]"; +while (<COMMANDS>) { + chop; + my @command = split /,/; + if ($command[0] != -1) { + $menu .= "\t\t"; + $menu .= "<tr><td valign=\"top\" class=\"navi" . $command[0]; + $menu .= "\"><a class=\"navi" . $command[0]; + $menu .= "\""; + $menu .= " HREF=\"$command[2]\">$command[1]</A></td></tr>\n\n"; + } +} +close COMMANDS; + +open TEMPLATE, $ARGV[1] || die "Can not open $ARGV[1]"; +while (<TEMPLATE>) { + push @template, $_; +} +close TEMPLATE; + +open COMMANDS, $ARGV[0] || die "Can not open $ARGV[0]"; +while (<COMMANDS>) { + chop; + my @command = split /,/; + + if ($command[2] =~ /^http:/){ + } else { + $n = $ARGV[2] . "/" . $command[2]; + open OUTPUT, ">" . $n || die "Can not create $n"; + + my $content = ""; + open INPUT, "src/$command[3]" || die "Can not open $command[3]"; + while (<INPUT>) { + $content .= $_; + } + close INPUT; + + my $line; + my $temp; + my $tit; + my $title; + my $css; + my $script; + + $tit = $command[1]; + $css = $command[4]; + $script = $command[5]; + + foreach $line (@template) { + $temp = $line; + $title = "$tit / Mono"; + $temp =~ s/#TITLE#/$title/; + $temp =~ s/#CONTENT#/$content/; + $temp =~ s/#MENU#/$menu/; + if ($css) { + $temp =~ s/#CSS#/<LINK rel="stylesheet" type="text\/css" href="$css">/; + } else { + $temp =~ s/#CSS#//; + } + + if ($script) { + $temp =~ s/#SCRIPT#/<SCRIPT src="$script"><\/SCRIPT>/; + } else { + $temp =~ s/#SCRIPT#//; + } + print OUTPUT $temp; + } + } + close OUTPUT; +} diff --git a/web/web/rss.cs b/web/web/rss.cs new file mode 100755 index 00000000000..c8966e51e52 --- /dev/null +++ b/web/web/rss.cs @@ -0,0 +1,262 @@ +// +// RSS.cs: Some utility classes to generate RSS feeds +// +// (C) 2002 Miguel de Icaza (miguel@gnu.org) +// +// +using System; +using System.Xml; +using System.IO; + +namespace RSS { + + public class Item { + XmlDocument doc; + XmlNode item; + XmlText title, link, description; + + public Item (XmlDocument doc, XmlNode item) + { + this.doc = doc; + this.item = item; + } + + XmlText MakeTextElement (string name) + { + XmlNode node = doc.CreateElement (name); + XmlText text = doc.CreateTextNode (""); + + item.AppendChild (node); + node.AppendChild (text); + + return text; + } + + public string Title { + get { + if (title == null) + return null; + + return title.Value; + } + + set { + if (title == null) + title = MakeTextElement ("title"); + title.Value = value; + } + } + + public string Link { + get { + if (link == null) + return null; + + return link.Value; + } + + set { + if (link == null) + link = MakeTextElement ("link"); + link.Value = value; + } + } + + public string Description { + get { + if (description == null) + return null; + + return description.Value; + } + + set { + if (description == null) + description = MakeTextElement ("description"); + description.Value = value; + } + } + } + + public class Channel { + XmlDocument doc; + XmlNode channel; + XmlText title, link, description, language, pubDate, lastBuildDate; + XmlText managingEditor, webMaster; + + XmlText MakeTextElement (string name) + { + XmlNode node = doc.CreateElement (name); + XmlText text = doc.CreateTextNode (""); + + channel.AppendChild (node); + node.AppendChild (text); + + return text; + } + + public Channel (XmlDocument doc, XmlNode node) + { + this.channel = node; + this.doc = doc; + + title = MakeTextElement ("title"); + link = MakeTextElement ("link"); + description = MakeTextElement ("description"); + } + + public Item NewItem () + { + XmlNode node = doc.CreateElement ("item"); + Item item; + + channel.AppendChild (node); + item = new Item (doc, node); + + return item; + } + + public string Title { + get { + return title.Value; + } + + set { + title.Value = value; + } + } + + public string Link { + get { + return link.Value; + } + + set { + link.Value = value; + } + } + + public string Description { + get { + return description.Value; + } + + set { + description.Value = value; + } + } + +#region Optional Values + public string ManagingEditor { + get { + if (managingEditor == null) + return null; + + return managingEditor.Value; + } + + set { + if (managingEditor == null) + managingEditor = MakeTextElement ("managingEditor"); + + managingEditor.Value = value; + } + } + + public string WebMaster { + get { + if (webMaster == null) + return null; + + return webMaster.Value; + } + + set { + if (webMaster == null) + webMaster = MakeTextElement ("webMaster"); + webMaster.Value = value; + } + } + + public string PubDate { + get { + if (pubDate == null) + return null; + + return pubDate.Value; + } + + set { + if (pubDate == null) + pubDate = MakeTextElement ("pubDate"); + pubDate.Value = value; + } + } + + public string LastBuildDate { + get { + if (lastBuildDate == null) + return null; + + return lastBuildDate.Value; + } + + set { + if (lastBuildDate == null) + lastBuildDate = MakeTextElement ("lastBuildDate"); + lastBuildDate.Value = value; + } + } + + public string Language { + get { + if (language == null) + return null; + + return language.Value; + } + + set { + if (language == null) + language = MakeTextElement ("language"); + language.Value = value; + } + } +#endregion + } + + class RSS { + XmlDocument doc; + XmlNode rss; + + const string rss_base = + "<?xml version=\"1.0\"?> <rss version=\"0.92\"></rss>"; + + public RSS () + { + doc = new XmlDocument (); + + doc.LoadXml (rss_base); + rss = doc.DocumentElement; + } + + public Channel NewChannel (string title, string url) + { + XmlNode node = doc.CreateElement ("channel"); + Channel c; + + rss.AppendChild (node); + c = new Channel (doc, node); + + return c; + } + + public XmlDocument XmlDocument { + get { + return doc; + } + } + } +} + + diff --git a/web/web/src/.cvsignore b/web/web/src/.cvsignore new file mode 100755 index 00000000000..5053fb08904 --- /dev/null +++ b/web/web/src/.cvsignore @@ -0,0 +1 @@ +*.src diff --git a/web/web/template.html.in b/web/web/template.html.in new file mode 100644 index 00000000000..b275930ac62 --- /dev/null +++ b/web/web/template.html.in @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<title>#TITLE#</title> +<link rel="icon" href="../MonoIcon.png" type="image/png"> +<!-- background-image: url("images/bgsquares.gif"); --> +<style type="text/css"> +<!-- + body { font-family: "trebuchet ms", lucida, verdana, helvetica; + + background-attachment: fixed; } + body, td, table { font-family: "trebuchet ms", lucida, verdana, helvetica; + font-size: 14px; } + + .navi0 { font-size: 14px; font-weight: bold; background: #444444; } + .navi1 { font-size: 14px; font-weight: bold; left-margin: 10pt} + .navi2 { font-size: 10px; font-weight: bold; left-margin: 20pt} + .footnote { font-size: 12px; color: #aaaaaa; } + + a.navi0 { color: #ffffff; text-decoration: none} + a.navi0:visited { color: #cccccc; } + a.navi0:hover { color: #ee9900; text-decoration: underline; } + + a.navi1 { color: #ffffff; text-decoration: none; margin-left: 7px;} + a.navi1:visited { color: #cccccc; } + a.navi1:hover { color: #ee9900; text-decoration: underline; } + + a.navi2 { color: #ffffff; text-decoration: none; margin-left: 20px;} + a.navi2:visited { color: #cccccc; } + a.navi2:hover { color: #ee9900; text-decoration: underline; } + +// --> +</style> +#CSS# +#SCRIPT# +</head> +<body bgcolor="#555555" text="#000000"> + +<table cellpadding="0" cellspacing="0" border="0" width="100%"> + <tr> + <td><img src="images/pixel.gif" alt=""></td><!-- left border --> + <td colspan="4"> + <a href="http://www.go-mono.com"><img src="images/mono-new.gif" + alt="mono-logo" border="0"></a></td> + <td><img src="images/pixel.gif" alt=""></td><!-- right border --> + </tr> + <tr> + <td><img src="images/pixel.gif" width="1" height="1" alt=""></td> + <td colspan="3" bgcolor="black"><img src="images/pixel.gif" + height="2" alt=""></td> + <td bgcolor="black"><img src="images/pixel.gif" width="1" alt=""></td> + <td><img src="images/pixel.gif" alt=""></td> + </tr> + <tr> + <td width="100"><img src="images/pixel.gif" alt=""></td> + <td valign="top"> + <table cellpadding="2" valign="top" cellspacing="0" border="0"> + #MENU# + </table> + </td> + <td bgcolor="black" width="1"><img src="images/pixel.gif" + width="1" alt=""></td> + <td bgcolor="white" align="left" width="80%" valign="top"> + <table cellpadding="16"> + <tr><td> + #CONTENT# + </td></tr> + </table> + </td> + <td bgcolor="black"><img src="images/pixel.gif" width="1" alt=""></td> + <td width="100"><img src="images/pixel.gif" alt=""></td> + </tr> + <tr> + <td colspan="2"> + <img src="images/pixel.gif" alt=""></td> + <td colspan="2" bgcolor="black"><img src="images/pixel.gif" + height="1" alt=""></td> + <td bgcolor="black"><img src="images/pixel.gif" width="1" alt=""></td> + <td><img src="images/pixel.gif" alt=""></td> + </tr> + + <tr> + <td colspan="2"></td> + <td colspan="2" align="center"> + <a class="footnote" href="mailto:webmaster@go-mono.com">webmaster@go-mono.com</a> + </td> + <td colspan="2"></td> + </tr> + </tr> +</table> + +</body> +</html> diff --git a/web/winforms b/web/winforms new file mode 100644 index 00000000000..91fb22d63ba --- /dev/null +++ b/web/winforms @@ -0,0 +1,120 @@ +* System.Windows.Forms + + System.Windows.Forms is currently being implemented using the + Win32 API, we will be using <a + href="http://www.winehq.com">WineLib</a> on Unix systems to + emulate the Win32 API. + + This means that those who want to contribute to the effort can + develop and test classes today using Windows and P/Invoke + calls to Win32 and we will then just run the result on Unix. + + In terms of integrating visually with the desktop, we are + hoping to contribute to the Wine project an mechanism to make + it use the Gtk+ themes on X11 and Cocoa on MacOS to render the + widgets, and get the native look and feel on each of these + platforms. + + There are no current plans to support embedded devices, but + Gtk/FrameBuffer is an option. If you have suggestions or + recommendations, please let us <a + href="mailto:mono-hackers-list@ximian.com">let us know</a> + +* Contributing + + The Winforms effort is being coordinated in the <a + href="mailto:mono-winforms-list@ximian.com:.com">mono-winforms-list@ximian.com</a>. + If you are interested in helping out with this effort, + subscribe to it by sending an email message to <a + href="mailto:mono-winforms-list-request@ximian.com:.com">mono-winforms-list-request@ximian.com</a>. + + If you want to help, you can start by writing a control and + testing it with Windows today (or you can also try to build + the existing library on Linux, but this is a bit more + complicated). + + See the file mcs/class/System.Windows.Forms/CheckOutList for + details on who is working on which class. + + Please read the README document in the + System.Windows.Forms/WINElib directory for details about how + to build the Windows.Forms support for Mono. + +* System.Drawing + + Using existing libraries to implement some of the + functionality required: + + <ul> + * gdk-pixbuf is a generic image loader that loads an image + and leaves it into an RGB buffer. It hides all the details + about what image file format is being loaded. + + * Libart is a general framework for rendering RGB/RGBA + buffers into RGB buffers and rendering postscript-like paths into + RGB/RGBA buffers. + </ul> + + We want to use gdk-pixbuf as the image loader for the image + classes, and then we need operations to render that into the + windowing system (Gtk+, MacOS, etc). But notice how there is + very little dependnecies in Gdk-pixbuf on gtk, and libart has + none. + + They are pretty independent from a windowing system + (gdk-pixbuf comes with some "helper" routines for rendering + data into a pixmap and to load pixmaps into RGB buffers). + + A few things to keep in mind: + + <ul> + + * gdk-pixbuf can be used to load images for Gtk+, + MacOS X and Windows, it should be pretty portable, + although we might need in the future to back-port + some new features from Gtk head. + + * Libart is probably only going to be used with X11, + as the MacOS X provides the same features in Quartz, + and Win32 *probably* has that in GDI+. If not, we + should use libart in Win32 as well (or for older + Windows systems). + </ul> + +* Directory Layout + +<pre> + System.Drawing (assembly directory) + System.Drawing.Blah + Common code for "Blah" + Stubs for "Blah" to ease ports. + + Gtk + System.Drawing.Blah. + Gtk ports of "System.Drawing.Blah" + MacOS + System.Drawing.Blah + MacOS ports of "System.Drawing.Blah" + WineLIB + System.Drawing.Blah + Win32 ports of "System.Drawing.Blah" +</pre> + + Notice that there is a proof of concept Gtk-backend for + Windows.Forms, but nobody is working on it, and for the + reasons stated before it is not a long term strategy. + +* Open questions: + + I believe that the graphics contexts that are used to render + can accept either libart-like rendering operations and + X11-like rendering operations. This complicates matters, but + I am not sure. Someone needs to investigate this. + +* Historical + + Although the original plans were to use Gtk on X and Cocoa on + MacOS X, it would be very hard to emulate the event model in + which some Winforms applications depend, and it would be very + hard to implement the Wndproc method. + |