Platform or Plumbing

I definately agree with Scott to a point. In the end, you can’t have pure .NET, because even the APIs themselves are going to call COM objects. So, if .NET can do it, why not my app? Well, for one, I want my apps to work under Mono and any other runtimes that come out. Not a big deal today, but planning ahead is a good thing.
[Jesse Ezell’s Weblog]

To me, the biggest reason to write 100% managed code is the obvious one – less work. CLR and BCL do much more heavy lifting than COM or Win32. What better reason do you need?

.NET APIs not only call to COM objects but also into the Win32 API as well. When you call System.IO.File.Open(), eventually that ends up as a call to CreateFile(). In Rotor, File.Open results in the construction of a FileStream object. You can see the call to CreateFile in the internal FileStream constructor (sscliclrsrcbclsystemiofilestream.cs). Reflector reveals a similar implementation for the .NET Framework. But as we start to see other CLR implementations on other platforms, I start to wonder how many of the underlying platform unmanaged API’s will be consistent across platforms? Some will obviously be consistent – file access, memory management, network sockets to name a few. Others such as distributed transaction management or 3D rendering will be missing or implemented in a inconsistent manner. For example: it would be very difficult to build a generic 3D library that used DirectX or OpenGL under the hood. You’d probably wind up with a library that targets the lowest common denominator, leaving vast portions of both APIs unexposed. Developers using your 3D library would be able to target both environments, but at a stiff price – lack of access to the cutting edge features of either environment.

Here’s a question I pose to blogspace: Is the .NET Framework a platform or just better plumbing for the underlying platform?

Tracking Bugs with “Pure” Managed Code

Jesse is working on a bug tracking system in 100% managed code. Scott has posted an awesome article on the Myth of .NET Purity. Given that I agree with Scott, you might think I’d disagree with Jesse avoiding other system on the basis that they “aren’t .NET based”. However, Jesse isn’t just building a stand alone system – it’s integrated with VS.NET. Also, the way you can build bug tracking directly into your production app is very cool. I wonder if Jesse is inspired at all by “Production Debugging for .NET Applications“.

I’m interested in Jesse’s system because of these features. The whole 100% managed code thing is nice, but as an end user of the system, I just want it to work.

Jesse – you’re building in support for web services as well, right?

GDN is down, and so am I

GDN being down is usually just annoying. Now, it’s keeping me from Adam’s CLRSpy. I hear it’s awesome. Damn!

Crossroads Revisited

Sam and Don are arranging another Crossroads blogger get-together on the 21st. Enjoyed the last time, but will have to give this one a miss. 21st is my birthday and I hear that my son Patrick has big plans.

SharePoint RSS v0.3

I’ve posted an update to my SharePoint RSS Feed Generator (which I now abbreviate WSS RSS). New features of v0.3 are support for OPML and support for feed configuration. Now, the admin can specify which top level sites, which subwebs and which lists are included in the RSS or OPML feeds. I’ve also done a bunch of structural stuff – no more need to edit web.config files. I’ve also produced separate binary and source archives, which is much easier if you just want to install the bits rather than play with the code.

I also modified the RSS feed to support Don’s RSS 2.0 Profile (profile link might be wrong, GDN is down). Here is the OPML profile that I am using in WSS RSS:

/outline/@type

  • mandatory – xsd:string
  • must equal “rss”

/outline/@title

  • mandatory if no description, optional otherwise – xsd:string (no embedded markup)
  • title of the RSS feed (i.e. same as /item/title in RSS)

/outline/@description

  • mandatory if no title, optional otherwise – xsd:string (no embedded markup)
  • description of the RSS feed (i.e. same as /item/description in RSS)

/outline/@xmlUrl

  • mandatory – xsd:anyURI (SHOULD be absolute)
  • url of RSS feed

/outline/@htmlUrl

  • mandatory – xsd:anyURI (SHOULD be absolute)
  • Url of HTML page