Last week I nearly fell of my chair I was sitting on. I found a kb article filed under http://support.microsoft.com/kb/898631/en-us. This articles describes what is supported and what is not supported regarding site definitions within SharePoint.
We do not support modifying a custom site definition or a custom area definition after you create a new site or a new portal area by using that site definition or area definition. Additionally, we do not support modifying the .xml files or the .aspx files in the custom site definition or in the custom area definition after you deploy the custom site definition or the custom area definition.
So site definitions are a one way ticket. All your requirements (even future ones) must be implemented before you actually create sites based on your site definition! This is far from “real life”.
This “supported and unsupported-link” is not referenced within the SDK (MOSS or WSS). The SDK describes the nice way of creating site definitions, how to deploy them e cetera. Once deployed your site definition has to be immutable! But this fact is not mentioned inside the SDK!
Even more confusion is spread when you want to lock down SharePoint Designer (which is now available for free) following Microsoft’s kb article filed under http://support.microsoft.com/kb/940958/en-us. If you read the article you will see that it suggests to modify the existing onet.xml files so that the changes also affects already provisioned sites.
Microsoft tells us that changing the site definition after sites have been provisioned with it is unsupported but on the other hand writes a kb article where site definitions should be modified to reflect changes to already provisioned sites! Another example of how difficult communication is!
Conclusion
SharePoint is a static environment when you rely on the “xml-ways” of customizing SharePoint. This issue also appears when using Content Types. Once a Content Type is deployed Microsoft “does not support” changes in the Content Type xml-definition.
What gets clear when reading the kb article (http://support.microsoft.com/kb/898631/en-us) is that changing/updating via code is always supported. Perhaps its time to move away from the xml-based declarative approach to the code-based approach.
Lets hope SharePoint 2010 will fix all these issues!