Oleg accidentally restarted the XSLT 2.0 on .Net firestorm by trying to startup an informal survey. Dare chimed in with his view of how to get XSLT 2.0 in .Net. M. David (the guy behind Saxon.Net which let .Net developers use Saxon on .Net) jumped in with his opinion.
But in the end, what does all this mean. From the outsider viewpoint, it could look like the .Net XML guys are fighting publicly, but let me assure you, that isn’t the case. Visual Studio 2005 and .Net has finally shipped, and now is the time to start looking at what should make it into the next version. The System.Xml team is hard a work compiling a list of things that may or may not make it into future releases, and Oleg is taking advantage of this, and is trying to help come up with support for things that he would like to see in the future of System.Xml. The System.Xml team has previously asked for feedback on various ideas (XML Projects being one of them), so now is your chance to get your voice heard.
One of the things that I’ve struggled with in System.Xml is how hard it is sometimes to extend the core library. The XML MVPs have done a good job with some things, but other things (like implementing XSLT 2.0 on top of the XSLT 1.0 stuff) are impossible because so much of the library is internal classes. When building a complex library like System.Xml, there are 2 competing schools of thought:
- Make the library easy to use and create a very small public facing surface area.
- Make the library more of a core library with most classes and attributes public, and let others build easy (and very specific) object models on top of it.
The upside of the first methodology is that it is much easier to test, and the library just works out of the box. The downside is that it very hard to extend the library, so it can only be used in very specific ways.
The upside of the second methodology is that you don’t have to trying to envision all the ways the library should be used. Over time others will extend it to accomplish things that the original developers never thought of. The downside is that you have a much larger surface area to test, and you are totally reliant on other projects to make your library useful. This goes for both projects internal to Microsoft and external projects like the Mvp.Xml lib.
The System.Xml team has tended to use the first methodology, where the ASP.Net team tends to build their core stuff according to the second methodology, and then have a sub-team create another library using the first methodology so developers have something to use right out of the box (think of System.Web.UI.HtmlControls as the low level API and System.Web.UI.WebControls as the higher level API). The ASP.Net builds their API this way because from the beginning they have always envisioned 3rd parties extending their library. At the moment, this is not the case of the System.Xml library. But the question is, should System.Xml be revamped and become a lower level API, and then rely on 3rd parties (like the Mvp.Xml project) to create more specific and easier to use APIs. Obviously this is not something to take lightly. It will be more costly to expose more of the internals of System.Xml. But, if only the lower level API was part of the core .Net framework, it may be possible to roll out newer higher level APIs on a release schedule different then the .Net framework schedule. This way projects like XSLT 2.0 could be released without having to what for the next version of the framework.
I’ve always been of the opinion that XSLT 2.0 does not need to be part of the core .Net framework. Oleg doesn’t believe that the .Net open source community is as passionate as some of the other communities, so he would like to see Microsoft build XSLT 2.0. I’d rather see the transformation of the System.Xml team into more of an ASP.Net like team. If .Net is the future of development on the Windows platform, and XML is the future of Microsoft, then the System.Xml team needs to grow beyond its legacy as just an offshoot of the SQL Server team. The System.Xml team still resides in the SQL Server building. Back before .Net, the System.Xml was known as the SQL Web Data team, and unfortunately, still carries some of that mentality. Folks like Joshua Allen and Dare (who are both not on the team anymore) fought to bring the team out from the shadows of SQL Server. With new XML related groups, like XLinq and Windows Communication Framework, popping up within the company the System.Xml group is at a major crossroads. They will either grow (in status and budget) and become more like the ASP.Net or they will get absorbed into one of the new groups.
I’d prefer to see the System.Xml team grow and become full partners with teams like ASP.Net and the CLR team. I’d like to see the XML based languages become first class programming languages within the Visual Studio IDE. That means not only using things like XSLT and XML Schema as dynamic languages, but also be able to compile them down to IL and compiled with the other .Net languages. I want to be able to create projects that contain not only VB or C#, but also XSLT and XML Schema (to name a couple), and have them compile into one executable. Then developers can use things like XSLT 2.0, or the next in vogue XML based language, and take advantage of that language’s unique benefits, without having to choose between a compiled procedural language (like C# or VB) and dynamic functional languages like XSLT. Linq is starting to bring in more of the functional programming style to the average procedural programmer, so I can start to see the rise public awareness of functional programming. It is only a matter of time before the average programmer feels as comfortable with functional programming as they do with procedural programming, so we need to look towards including these languages within the Visual Studio IDE (which then leads into my discussion about evolving Visual Studio into more of an IDE Framework, and extended with add-ins.)