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. |