Project Goals

To design and build enough cross platform APIs based on the CLI, so as to make writing advanced, fully cross platform CLI based applications a possibility.

News

5 February 2003

The preliminary API documentation can now be downloaded.  I'm still in the process of drawing up the design documentation and tidying up the source code for release.
 
15 January 2003

Project homepage started :-).

Frequently Asked Questions

Q: What is the Common Language Infrastructure (CLI)?
A: The CLI is a standardardised [ECMA and soon to be ISO] specification for a language (C#), bytecode (IL), virtual machine (VEE) and base class library (BCL).  Find out more about the spec at
dotnetexperts.
Q: What is the Common Language Runtime (CLR)?
A: The CLR is Microsoft's implementation of the CLI.
Q: What is .NET?
A: In the context of software development, .NET is an extension to the CLR.  It adds additional features such as Windows Forms and Enterprise Services.  These extensions are based around Windows technologies and are not standardised or cross platform (nor are they intended to be).
Microsoft also uses the term .NET as a blanket marketing label  for their products [which is kindda silly].
Q: What's wrong with the .NET?  Why is Platform.NET needed?
A: Many of the core .NET classes aren't standardised and inherently windows based.  Platform.NET aims to solve these problems.
Q: How does the Platform.NET project's approach differ the Mono project's approach?
A: The Mono team want to replicate all of Microsoft's .NET APIs.  This will help get Windows applications running on Linux but I don't think it is a viable long term solution for free CLI applications.  Many of the .NET APIs are windows based and proprietary Microsoft technology.  Most of the APIs aren't abstract and are tightly coupled with Windows.  Unlike the CLI they were never designed nor intended to be cross platform.  Platform.NET's approach is to design and implement better cross platform APIs on-top of the ECMA standards and to encourage Windows developers to use those APIs.
Q: What runtimes will Platform.NET support?
A: Any runtime that implements the ECMA standards.  Currently this includes the .NET framework, Rotor, Mono and Portable.NET.  Mono and Platform.NET are the primary targets.  The majority of testing is performed on Mono because it is the most complete OSS CLI.
Q: What APIs will Platform.NET support?
A: The goal is to implement the necessary APIs to create a Java-like platform.  See the roadmap.
Q: Isn't the CLI already a platform like Java?
A: No, the CLI isn't a platform, it is an infrastructure.  It consists of  a language spec and a set of core classes.  This makes the CLI much more like C + LIBC than the Java platform.  Unlike the Java platform spec, the CLI spec doesn't define basic APIs for things such as Sound, UI, Drawing and 3D.  Microsoft designed the CLI to allow software built upon it to take advantage of the underlying OS.  Using it in that way would make the CLI unsuitable for cross platform development.  Platform.NET, like the Java2 class library, abstracts off the underlying OS while still providing OS-like services.  Platform.NET and an implementation of the CLI together forms a meta-platform.
 
Q: How does Platform.NET achieve platform independence?
A: Platform.NET builds upon the ECMA CLI standard which is platform independent.  Some APIs (such as Platform.Sound) can't be implemented using the standards alone and will require calls to native code1.  Any native code used is isolated and ported to other platforms.  Wherever appropriate, existing cross platform native APIs will be used.  For example, Platform.Sound.Sampled utilises
PortAudio; a cross platform, C based sound API.  Native APIs will be called through interop using P/Invoke (which is part of the ECMA standard).

1: The native code makes up the Host Platform Abstraction Layer (HPAL)Managed Platform.NET code always go through the HPAL and never invokes native OS APIs directly.  This will prevent the (unattractive) situation where different managed assemblies need to be deployed on different operating systems.  The only libraries that will be different will be the native libraries.
Q: What host platforms will you support?
A: Currently only Windows (98 and above) and Linux (2.4 and above).  Other platforms will be supported as CLI implementations for them mature.
Q: Why are you doing this? What's wrong with Java?
A: Java is BRILLIANT, but I love designing and building frameworks, platforms and languages.  The CLI (being relatively new and all) allows me to do what I love doing.
Q: So you're pretty much porting the J2SDK to C#?
A: Some of the APIs are inspired by the Java's APIs, others won't be.