The DotGNU project aims to be for webservices and for C# programs what GNU/Linux is rapidly becoming for desktop and server applications: the industry leader and provider of Free Software solutions.
DotGNU currently consists of three main development projects (further components will be added over time):
Major motivations for being involved in DotGNU include:
Click on the thumbnails to view the screenshots in full size with a brief explanation. More screenshots.
DotGNU news is also available as an RSS feed.
Version 0.6.10 of pnet, pnetlib, pnetC, and ml-pnet and version 0.3.4 of treecc have been released. The full release announcement is here.
GetDotGNU.com is a new web portal dedicated to DotGNU and its development projects. The site features news articles and editorials, forums, downloads, screenshots, and many other great features. It is time to Get DotGNU! now.
Version 0.6.8 of pnet, pnetlib, pnetC, and ml-pnet, version 0.3.2 of treecc, and version 0.0.4 of libjit have been released. There are lots and lots of bug fixes and new features. The full announcement with NEWS entries and signed MD5 checksums is here.
All phpGroupWare versions earlier than 0.9.16.002 set header admin and setup passwords as plain text cookies. Now the bugfix security release 0.9.16.002 is out which fixes this security problem.
Even though Rhys was on "sabbatical" away from Portable.NET during this release cycle (he has been working on libjit), major progress has been made in many areas, including in particular threading, Winforms, System.Xml, ml-pnet, DCOP and serialization.
The full release announcement is here.
Here are some screenshots: Portable Studio IDE, MyXaml, Photo Tool (wx.NET), KDE DCOP Support, MDI and FileDialogs, Gtk-Sharp, Svg Rendering, XHTML Rendering .
Rhys has packaged up the current state of the libjit tree into a libjit 0.0.2 release.
Libjit is now at the state where primary testing and bug fixing can begin. We initially need test cases that cover all of the functions in "jit-insn.h".
The easiest way to write a test case is to write a small program in the "Dynamic Pascal" language that exercises the feature in question. Then place it into the "libjit/tests" directory. The "libjit/tests/README" file contains more information on how to do this. A couple of test cases are already provided that demonstrate the concept.
The libjit library implements Just-In-Time compilation functionality. Unlike other JIT's, this one is designed to be independent of any particular virtual machine bytecode format or language. The hope is that Free Software projects can get a leg-up on proprietary VM vendors by using this library rather than spending large amounts of time writing their own JIT from scratch.
This JIT is also designed to be portable to multiple architectures. If you run libjit on a machine for which a native code generator is not yet available, then libjit will fall back to interpreting the code. This way, you don't need to write your own interpreter for your bytecode format if you don't want to.
libjit is independent of pnet (that's one of the main points!) but we'll eventually modify pnet to use it for JIT'ing.
In the newly released version 0.0.0f, tutorials 1 to 4 now work correctly using the interpreted back end, which should allow people to experiment with real examples now. The x86 and ARM back-ends should follow in the next few days.
A mailing list for libjit-specific discussions has been set up.
Portable.NET 0.6.4 and Treecc 0.3.0 have been released. The big change this cycle is the C compiler, which has now reached the point of being useful. We now need lots of volunteers to help flesh out the C library, pnetC, to include all of the usual libc features. There have also been a lot of bug fixes and performance improvements in System.Windows.Forms, thanks to Neil Cawse. And Richard Baumann has completely rewritten the System.Xml parser, fixing many long-standing issues with the XML library.
The new C compiler type system has been checked in. Type layout is now totally dynamic; the IL binary will automatically adapt itself to the runtime engine it is running on. This means that DotGNU is bringing true "write once, run anywhere" functionality to C, running on top of standard CLR implementations. Unlike Microsoft's C compiler, whose output will only run on i386-based Windows systems, ours will run portable ANSI C code on any platform that has a CLR, be it 32-bit or 64-bit, little-endian or big.
Simple examples of C programs can be compiled to IL now, and volunteers are needed to work on the standard C library so that more programs and libraries can be compiled. Our eventual goal is to bring a large body of Free Software libraries and programs to the CLI environment, vastly increasing the range of functionality beyond the small number of libraries currently defined for C#.
We were mentioned in the ".NET Developer's Journal Readers' Choice Awards
2003", achieving third runner up in the "Best .NET Build Tools/Installers"
category and second runner up in the "Best .NET CLI" category. The full
details are at the following URL:
http://www.sys-con.com/2002/PR/02252004.cfm
Gnu-friends has an interview about the history of DotGNU and nb's views on Free Software philosophy: http://gnu-friends.org/story/2004/2/27/15415/3365
Thanks to the efforts of olegb, "DarwinPorts" packages of DotGNU Portable.NET 0.6.2, including System.Windows.Forms, are now available. To install, use "port install pnet; port install pnetlib; port install ml-pnet"
Version 0.6.2 of DotGNU Portable.NET has been released with many
enhancements particularly in the area of System.Windows.Forms
,
with improvements to most controls, fonts, MDI, tree views, and file dialogs.
Please use the
Southern Storm
site for now for downloading it, as we are currently unable to update
ftp.gnu.org
Thanks to the efforts of Adam Ballai and Lance Gilbert DotGNU Portable.Net is now running on Sony Playstation 2 (which has a little endian "R5900 V3.1" MIPS cpu.)
Four DotGNU'ers have made it to LCA2004 in Adelaide, Australia. A group photo is here. From the left, we have Andrew Mitchell (ajmitch), Rhys Weatherley (rhysw), Chris Smith (cds), and Dave Hall (skwashd, who wishes to remain anonymous for reasons unknown).
All official GNU websites (which are on www.gnu.org or tightly synchronized
with www.gnu.org, where in the example of DotGNU, our website is at
http://www.gnu.org/projects/dotgnu/)
were in hiatus between mid-November 2003 and January 2004 due to a
security breach at an important server of the Free Software Foundation,
and the resulting need to set up a much more secure system. The new
system is available now, although it seems to have a bug which
prevents the www.gnu.org
version of the DotGNU website from being
updated. Since the DotGNU project has important news to share, and I don't
have much hope of this project-specific bug being treated with priority (it may
have to do with DotGNU being under /projects
on
www.gnu.org
and not under /software
like almost
everything else), I'm now updating dotgnu.org
without waiting for
the savannah webcvs bug to be fixed.
Support for the upcoming "Whidbey" System.Console routines has been added to Portable.NET, and there is a simple "Snake" game that demonstrates how to use it. A screenshot is here
The release announcement for the DotGNU 0.1 CD-ROM release has been posted.
It is now possible to embed any X application as a child widget within an Xsharp application. The pnetlib CVS tree includes "XClockEmbed.cs" as an example of doing this for "xclock", and this screenshot shows both "gedit" (a GNOME app) and "kcalc" (a KDE app) running as two children of the same Xsharp main window. This is important because the next version of WinForms will have a HTML web browser control widget, and we will want to embed an existing third-part Free Software web browser, and not write a web browser from scratch in C#.
BitTorrents for DotGNU 0.1 are available now at http://download.freedom.biz/dotgnu/. You can download the gzip'ed DotGNU 0.1 CD-ROM iso image (219 MB) or the following binary packages: Debian GNU/Linux .deb packages, RedHat/Fedora (S)RPMS, Mandrake9 rpm packages, FreeBSD packages, Mac OS X packages, and also Installer packages for the MS Windows system.
Up-to-date source tarballs for Portable.NET are again available from ftp.gnu.org and its mirrors.
DGEE 0.1.6 has been released. The DotGNU 0.1 release will follow very soon.
Version 0.6.0 of DotGNU Portable.NET has been released. This is the release which will go onto the DotGNU 0.1 CD. It contains lots of bug fixes, functionality was missing in earlier versions, and huge improvements in System.Windows.Forms. The full release announcement is here.
A feature freeze for Portable.NET is now in effect, leading up to the DotGNU 0.1 release, which will be "really soon now". During feature freeze, bugs in existing code will be fixed if they are either easy to do, or there is no way for a programmer to work around them. Anything that may impact stability will be deferred until after DotGNU 0.1.
Portable.net now runs pnetlib's System.Windows.Forms also on the Microsoft Windows System. This is a major achievement in the area of portability. There is a screenshot.
Portable.NET 0.5.12 has been released, and is available for download. This is mostly a bug fix release, heading up towards 0.6.0, but with substantial improvements throughout the system. Particularly Winforms (many thanks to Neil Cawse). Please check out the new, improved pnetlib-status pages, and help us nail the rest of the core classes prior to 0.6.0.
The DotGNU project is holding an international competition in the area of collaboratively implementing System.Windows.Forms. Besides the chance of winning one of fifteen monetary prizes totalling US$ 4500, participants get the good feeling of having contributed to setting the IT world free from the dominion of a certain monopolistic company. The full announcement is here.
At today's irc meeting, the release date for DotGNU 0.1 has been fixed at end-September. For Portable.NET the goals are to get pnetC to basic usefulness, fix as many system.xml bugs as we can, and make the core button/textbox/scroll widgets work in winforms.
Breaking the tradition, which required a 0.6.0 this time , the pnet developers have decided to put out 0.5.10, 0.5.12, etc, as release candidates for 0.6.0, which will be part of DotGNU 0.1.
A lot has happened this release. The System.Windows.Forms namespace is coming along well. The DotGNU community has chipped in more than its fair share of it this release - particularly Simon Guindon, Neil Cawse, Richard Baumann, Ian Fung, Cecilio Pardo, and the relentless Gopal V. Threading now works very well (thanks to Thong Nguyen aka tum) and Reflection.Emit (Richard Baumann) too. The C compiler has advanced enough to compile most C programs. The pnetC now has significant bits of glibc and is looking for people to help port the rest of glibc here. The CVM unroller was also rewritten into a generic framework that should be much easier to port to new architectures.
Read the full NEWS entries here. here and download it from here.
Gardens Point Component Pascal (GPCP) works with Portable.net. GPCP is interesting because the compiler and runtime are completely hosted inside the CLI environment, using ilasm to generate the output binaries. Read more about GPCP here and the instructions for using it with Portable.net here.
TreeCC 0.2.6 was released with minor modifications , which adds an additional GC allocated node model to the original HEAP allocated (malloc) model and namespace support to C++ output. Other minor bug fixes and improvements go along. Read the full announcement here.
Portable.NET on the PPC has recently doubled in speed due to the use of manual register assignments on that platform. The speed gains will be noticeable once the PPC unroller port has been completed. For more details, read the mailing list thread.
The generic unroller has finally hit pnet cvs. The unroller is responsible for producing native code (much like a JIT) for the pnet runtime. The generic unroller separates the CPU specific details of native code generation, like opcode values and register ordering, from generic features, like register allocation, greatly simplifying the process of porting the unroller to new platforms. The ARM and x86 ports are already working and support for IA-64, PPC, and Alpha is in the works. For more details, read the mailing list thread.
The DotGNU Manifesto is now official, and consequently the version number has been changed to 1.0. (There are no other changes from draft version 0.4).
Thanks to the works of Thong Nguyen (tum), threading is working in DotGNU Portable.NET now. For more details please refer to the PortableNet/Threads wiki page.
We now have a video clip showing one of the famous DotGNU coding fingers testing System.Windows.Forms on an Ipaq handheld computer with DotGNU Portable.NET
A lot of things have happened since the last Portable.NET release. The Java and Visual Basic language front-ends for cscc have been added to the system, and a huge number of new classes have been implemented in pnetlib, including support for IPv6 and IrDA networking.
We have also begun implementation of the System.Windows.Forms library, built on top of the X11 library. This means that it will be able to run on any X11-capable system. Currently tested to work on x86-based GNU/Linux systems and ppc-based MacOS X systems.
We are looking for volunteers to help us implement the "x11-winforms" library as quickly as possible, and to test it on as many platforms as possible.
Finally, the ml-pnet project has been started to provide ports of certain Mono C# libraries. System.Data (ADO.NET) currently works, and we hope to have System.Web (ASP.NET) working soon.
The full announcement is here.
Portable.net System.Windows.Forms is now working on OS X as well as GNU/Linux. Screenshots of test programs on OS X are here, here and here. We ask OS X developers to help us with continuing this work.
Portable.net has started work on the System.Windows.Forms namespace and a simple forms example has been run on the platform. The WinForms effort is to proceed as a new lightweight toolkit based on System.Drawing rather than as a UI wrapper system. This will allow it to be compatible to the specifications even when the native UI is different. Currently a system based on X11 drawing apis is being developed. Read all about it here or see a screenshot.
The DotGNU Portable.net project now has added a full capability Managed Postgresql Provider thanks to the efforts of the Npgsql project admin Francisco Figueiredo Jr. The detailed instructions are available from the Npgsql News Page .
The DotGNU Portable.NET project has passed the "750,000 lines of code" milestone. Read the full anouncement here.
Portable.NET now has support for IPv6 (the "next generation" internet protocol which fixes a number of problems with the current version, in particular the limited number of available IPv4 addresses) and the IrDa sockets protocol (so that now you can use DotGNU to build networks between infrared capable handhelds and workstations). With Portable.NET, IrDA is supported in all versions where the OS kernel supports it, not just handhelds. (This differs from Microsoft's version of .NET where IrDa capability is not available in the workstation-level SDK.)
The pnetlib-status pages have been updated to include comparisons to the .NET 1.1 standard. Only 474 classes to go, so please pick a class , any class and lend a hand. We're nearly there !.
Version 0.0.2 of the DotGNU JAVA compiler has been released and integrated into pnet cvs.
Following a complaint that DotGNU did not yet have a compiler for a minimalistic programming language, such a compiler was quickly created, together with a demo webservice. The code is in pnet cvs and can serve as a simple example of a cscc plugin.
The beginnings of Visual Basic.NET support are now in pnet cvs. Try "cscc -o hello hello.vb" and run with "ilrun hello". If you would like to help out on the VB project, then there is lots of work still to do:
1 and 2 require cscc compiler skills - if you're interested in learning the compiler, then this is the time to start. The Java, VB, C#, and C front ends will all need lots of eager beavers over the next few months. 3, 4, and 5 are easier, mainly requiring C# and/or VB programming skills. Grep for "TODO" under pnetlib/Basic, check out the documentation for the Microsoft.VisualBasic namespace on msdn.microsoft.com, and send in those patches!
Rhys has written a CVM code unroller for ARM/StrongARM platforms. An unroller uses some simple JIT techniques to translate commonly-used CVM instructions into native code. The result is about a 2-3 times improvement in performance on ARM, compared with the default direct threaded configuration. For more details, read the announcement.
Besides "mscorlib.dll" being now 100% signature compatible with the corresponding assembly in version 1.1 (see previous news item), the other big news is that the library can now be built in multiple configurations with "./configure --with-profile=X", where "X" is one of the following:
full, ecma, compact, compact-fp, kernel, kernel-fp, tiny, tiny-fp
For detailed NEWS entries and signed md5sum's, read the announcement.
The lowest-level library within pnetlib, "mscorlib.dll", is now signature compatible with the corresponding assembly in version 1.1 of the .NET Framework SDK. Every class, every method, every interop marker attribute, and every silly little enumerated constant. All of it! Read the announcement and please help with testing!
RMS has responded to the new DotGNU Manifesto draft with the words "It looks good to me".
Bob Johnson has compiled DotGNU Portable.NET
and
TREECC
for the
Microsoft Windows system and created nice "installer" packages.
Thanks, Bob!
A thoughtful discussion of W3C's new proposed Patents Policy, and why it is unacceptable from DotGNU's perspective, is unfolding at kuro5hin.org following an opinion piece posted by nb aka bizcoach.
Version 0.1.4 of DGEE, the DotGNU Execution Environment has been released. There is now full XML-RPC support, multiple VM support, multiple webservice language support, auto-generation of client XML-RPC code from assembly, and better memory management. An installation helper "dgeediagnose" is available for sorting out ipc resource issues.
DotGNU Portable.Net 0.5.4 has been released. Pnetlib 0.5.4 and TreeCC 0.2.4 have been released along with it. The high points are the beginnings of support for Generic IL and Reflection.Emit, with lots of little bug fixes here and there. Read more here or go get it from here.
The Portable.NET project, which is central for DotGNU's efforts for compatibility with Microsoft's .NET, now has a firm release schedule. Full support for ECMA standards 334 and 335 is expected by the end of June 2003.
DotGNU now has a collaborative webpage at wiki.dotgnu.org and is building a collection of information related to dotgnu and its subprojects. Adam Ballai has been central to this development and has set this up . So everyone is invited to chip in and go wiki.
The DotGNU Portable.net base tools now have support for Generic IL. Portable.NET is the first Free Software implementation of the CLI to release real support for Generic IL. It includes the assembler and disassembler for now. The compiler is being worked upon to support generic C# in the near future. Read all about what's done and what's not in this mail .
DotGNU Portable.Net 0.5.2 has been released. Pnetlib 0.5.2 and TreeCC 0.2.2 have been released along with it. This release has been a quantum jump in portability with platforms as varied as x86,IA-64,S390,arm,PA-RISC etc being supported. Read about the rest of the new whistles and bells here or go get it from here.
The Dotgnu website team have decided that RSS is the way to go and true to our webservice initiatives we now have a cool RSS feed. Syndicate !
A paper about ``The Design of the Portable.NET Interpreter'' is being presented by Rhys Weatherly at the Linux Conference 2003, Australia. The paper will discuss the various levels of optimizations that are selected platform-wise to make the Portable.net interpreter faster and yet still remain truly portable. Read the entire paper in PDF here.
Rhys Weatherly has brought out a good demo of Portable.net with a Mahjong game with Qt#. It works with the Portable.net 0.5.0 release and the Qt# 0.6. Get the sources from mahjong-0.0.1.tar.gz or see a screenshot at Qt# website . Play on !
The DotGNU Portable.net and DotGNU DGEE are coming up with releases today. The Portable.net is having a milestone release of 0.5.0 . Read all about the Portable.net release here . The new release has touched the half million line mark, read the exact figures here . We'll be announcing the binary packages soon.
The Dotgnu Webservice container , otherwise known as the Dotgnu execution environment (DGEE) has reached usable levels. Chris Smith has hacked up this server which does not run inside Apache , but adopts the strategy other AppServers like Tomcat has been using. The C# webservice system is functional and uses Apache and Goldwater as the network and execution containers respectively. The system is self documenting and includes introspection into the webservices. It currently supports only XmlRpc and is only a pre-release. Also read more about DGEE here.
The Portable.Net platform now works on Win32 without any dependencies on the Cygwin wrappers. The build system uses the Minimal Gnu For Win32 or Mingw32 libraries to achieve this. Read the full announcement here.
The Qt# project has managed to compile its libraries and run the sample programs included with Qt# on Portable.Net. Excluding the Xml based bindings generator program , the rest of Qt# compile and run with ease on Portable.Net. The screenshots have been put up for a peek at Gui programming with Portable.net. Take a look at mandelbrot and scribblewindow.
Chris Smith has brought out a nice specification for the DGEE core module communication. The good thing about this is that it is not tied down to XML or any encoding format, but allows arbitary data chunks such as XML, C# byte code, HTML form post data etc to be packaged together and sent as a single message between the internal components of the VRS/SEE core DGEE.
Read the full specification here. And get a proof of concept implementation in C here.
Thanks to the efforts of Peter Minten (silvernerd) , we now have a Ruby generator for treecc . Treecc is a tool that simplifies construction, manipulation and traversal of Abstract Syntax Trees . It was developed for building the Portable.Net compiler tools . See announcement here.
The IRC meeting to discuss adding Parrot to t