Microsoft community manager Peter Galli announced Wednesday that Microsoft will apply its Community Promise to ECMA 334 and 335, the standards that document the C# programming language and .NET's Common Language Infrastructure (CLI). This move affirms Microsoft's willingness to enable the development of third-party .NET implementations such as Mono.

The Community Promise is a legally binding commitment through which Microsoft pledges to not assert its patents against others who implement certain Microsoft standards and technologies. This means that developers can create their own interoperable versions without exposing themselves to the risk of patent infringement lawsuits from Microsoft. Unlike the covenant that was part of Microsoft's controversial agreement with Novell, the Community Promise does not discriminate against any users or restrict downstream redistribution. It is generally compatible with open source licenses and philosophies.

This could have significant implications for Mono, an open source implementation of .NET that is developed by Novell. Mono is being adopted by a growing number of developers and has been used to build some popular desktop Linux applications, including the Banshee music player, the Tomboy note application, the F-Spot image manager, and the GNOME-Do launcher. Several of those applications are included by default in widely-used Linux distributions, such as Ubuntu and OpenSUSE.

Mono has proven useful for the Linux platform, both because it is highly conducive to rapid development and because it makes it easier for Windows application developers to migrate their skills and software to the open source operating system.

Mono is also being adopted in some unexpected places where its flexibility gives it an advantage over Microsoft's own implementation. The most notable example is iPhone development, where Mono's support for ahead-of-time, static compilation gives developers the ability to use C# without falling afoul of Apple's draconian App Store restrictions. Mono has also made an appearance in the Second Life game client, where it is used as an embedded scripting engine.

Mono has the potential to give developers a free and open implementation of .NET in much the same way that GNU and Linux provide a free and open implementation of C and UNIX. Although this offers significant benefits, deep distrust of Microsoft within the Linux community has limited the adoption of the open source runtime.

The distrust exists because Microsoft's track record on facilitating unencumbered interoperability with Linux has traditionally been poor. Microsoft has consistently said that it will not collaborate directly with Linux distributors on interoperability issues unless the distributors agree to patent agreements that are hostile to the principle of freely redistributable software. Another source of concern among Linux users is Redmond's unsubstantiated allegation that Linux infringes on its patents. These issues have made it difficult for some Linux enthusiasts to feel comfortable with Mono.

Despite the constant ideological friction between Microsoft and the Linux community, Microsoft is increasingly embracing open source and is being relatively cooperative when it comes to development technologies. The company has done much to enable the development of third-party .NET runtimes. When C# and the CLI became ECMA standards, Microsoft agreed to make its relevant patents available under reasonable and non-discriminatory (RAND) terms so that the technology could be adopted by others. Microsoft has made similar commitments in the past for other standards that it participated in authoring, such as USB and UPnP.

Some in the Linux community, however, were not satisfied with the RAND terms and wanted clarification. The Mono developers began discussing this issue with Microsoft several months ago and asked for an authoritative and legally binding statement that would eliminate the patent concerns. Microsoft decided to apply the Community Promise in order to fulfill that goal.

"It is important to note that, under the Community Promise, anyone can freely implement these specifications with their technology, code, and solutions. You do not need to sign a license agreement, or otherwise communicate to Microsoft how you will implement the specifications," wrote Galli in the announcement. "Under the Community Promise, Microsoft provides assurance that it will not assert its Necessary Claims against anyone who makes, uses, sells, offers for sale, imports, or distributes any Covered Implementation under any type of development or distribution model, including open-source licensing models such as the LGPL or GPL."

The Community Promise covers patents controlled by Microsoft that are required in order to produce an implementation. In order to prevent fragmentation, it specifies that implementations must be compliant with the mandatory parts of the specification in order to be covered by the Promise. This application of the Promise covers the contents of ECMA 334 and 335, but not additional .NET technologies that are outside the scope of those standards. The area covered by those standards includes the C# programming language, all the relevant parts of the runtime environment, and the standard library. It does not include ASP.NET, the WinForms APIs, or other proprietary Microsoft technologies.

Lead Mono developer Miguel de Icaza says that his team will simplify the matter for programmers by distributing Mono in two parts: the components that are included in the standard and the components that are not included in the standard. This will make it easier for users and developers to avoid the handful of components that are not covered under the Promise if they wish to do so.

"A few months ago we approached Bob Muglia and Brian Goldfarb (@bgoldy) at Microsoft with a request to clarify the licensing situation for the ECMA standards covering C# and the CLI (also ISO standards, for the ISO loving among you)," de Icaza wrote in a blog entry. "In the next few months we will be working towards splitting the jumbo Mono source code that includes ECMA + a lot more into two separate source code distributions. One will be ECMA, the other will contain our implementation of ASP.NET, ADO.NET, Winforms and others."

It's worth noting that the popular Mono-based desktop Linux applications that were mentioned previously in this article are all using GTK# and other components of the GNOME stack. This means that they fit within the boundaries of what is protected by the Community Promise.

The Community Promise will likely satisfy virtually all of the users and developers who have had concerns in the past about the legal implications of using C# on the Linux platform. It's unclear, however, if anything will be able to change the views of the vocal minority of extremists who believe that Mono is part of a ploy to undermine the Linux platform.

By putting the C# and CLI standards under the Community Promise, Microsoft has demonstrated a strong commitment to collaborating with the open source software community and empowering the developers of third-party .NET implementations. Much like Microsoft's recent contributions to the Apache Foundation, it's a sign that Redmond is coming to terms with open source and appreciates the advantages of truly open standards in some contexts. The Community Promise is also a major win for cross-platform programming and rapid application development on the Linux platform, as it will clear the way for more developers to adopt Mono.