Official Blog of Shaun Walker


Breaking Changes

By Shaun Walker on 5/5/2015
( Excerpt from Professional DNN7 Open Source .NET CMS Platform - WROX Press - May 2015 - ISBN: 978-1-118-85084-8 )

The integration of the ASP.NET 2.0 Membership API resulted in a technical dilemma known as a “breaking” change. Essentially this occurs when the primary interfaces of a  platform are modified in a way that does not preserve compatibility with previous versions. As a result, extensions that were developed against previous versions will no longer function with the new version. In the case of DotNetNuke it meant that version 2.0 modules would need to be modified in order for them to work with the new platform, now identified as version 3.0.

Once it became clear that breaking changes were unavoidable it led to a decision of “If you are forced to break compatibility, you might as well introduce all of your breaking changes in one breaking release.” There was a lot of legacy baggage that had been preserved from the original IBuySpy Portal in order to preserve backward compatibility. DotNetNuke 3.0 provided the opportunity to reexamine the entire project from a higher level and make some of the fundamental changes we had been delaying for years in some cases. This included the removal of a lot of dead code and deprecated methods as well as a full namespace reorganization that finally accurately broke the project API into logical components.

DotNetNuke 3.0 also demonstrated another technical concept that would both enrich the functionality of the application framework as well as improve the extensibility without the threat of breaking binary compatibility. Up until version 3.0, the service architecture for DotNetNuke was completely unidirectional. Custom modules could consume the resources and services offered by the core DotNetNuke framework but not vice versa. So although the application managed the secure presentation of custom modules within the portal environment, it could not get access to the custom module content information. Optional interfaces were added to enable custom modules to provide plug-in implementations for defined core portal functions. They also provided a simple mechanism for the core framework to call into third-party modules, providing a bidirectional communication channel so that modules could finally offer resources and services to the core.

Along with its many technological advances, DotNetNuke 3.0 was also being groomed for use by entirely new stakeholders: web hosters. For a number of years, the popularity of Linux hosting has been growing at a far greater pace than Windows hosting. The instability issues of early Microsoft web servers was a now thing of the past as Microsoft released more resilient and higher-quality server operating systems. Windows Server 2003 had finally shed its clunky Windows NT 4.0 roots and was a true force to be reckoned with. However, aside from the obvious economic licensing reasons, there was another clear reason why hosters were still favoring Linux over Windows for their clients: the availability of highly functional end-user applications.

The Linux platform had long been blessed with a plethora of open source applications running on the Apache web server, built with languages such as PHP, Perl, and Python, and leveraging open source databases such as mySQL. (The combination of these technologies commonly referred to as LAMP.) The Windows platform was really lacking in this area and was desperately in need of applications to fill this void.

For DotNetNuke to take advantage of this opportunity, it needed a usability overhaul to transform it from a niche developer–oriented framework to a polished end-user product. This included a usability enhancement from both the portal administration as well as the web host perspectives. When Rob Howard left Microsoft in June 2004, my primary Microsoft contact became Shawn Nandi. Shawn did a great job of drawing upon his usability background at Microsoft to come up with suggestions to improve the DotNetNuke end-user experience. Portal administrators received a multilingual user interface with both field-level and module-level help. Enhanced management functions were added in key locations to improve the intuitive nature of the application. Web hosters received a customizable installation mechanism. In addition, the application underwent a security review to enable it to run in a Medium Trust — Code Access Security (CAS) environment. The end result was a powerful open source, web-application framework that could compete with the open source products on other platforms and offer web hosters a viable Windows alternative for their clients.

Much of the integration work on the Membership API and usability improvements were fueled by a much larger hosting initiative that Microsoft was preparing to unleash in May 2005. This initiative codenamed the "Windows Shared Hosting Accelerator" ( or WSHA ) included a comprehensive program aimed at increasing awareness for Windows-based hosting solutions on an international level. Based on its strength as a framework for building consumer websites, Microsoft invited DotNetNuke to participate in the program as long as it could meet a defined set of technical criteria, including Membership API integration, Medium Trust CAS compliance, localization, and usability improvements. Nearly all of the enhancements were already identified on the product roadmap, so the opportunity to be included in the hosting program was really a win-win proposition for the project and the community. In addition, we believed that the benefit of participating in such a large-scale initiative would be enormous in terms of lending credibility to the DotNetNuke product, introducing the project to influential new stakeholders, and helping to build brand equity.

Core Team members made significant contributions during the development of DotNetNuke 3.0. Scott McCulloch, with the assistance of Jeremy White, implemented a full-featured URL rewriting component that allowed DotNetNuke to use standard URLs. Vicenç Masanas was instrumental in working on localization, templating, and stabilization tasks. Joe Brinkman implemented search-engine architecture, enabling content indexing across all modules in a portal instance. Jon Henning introduced a Client API library, enabling powerful client-side behavior in DotNetNuke modules. Perhaps the greatest code contributions were made by Charles Nurse. Realizing the massive amount of work that would be required to deliver the enhancements for the hosting program (and knowing that using only volunteer efforts would not hit the schedule deadlines), I hired the first full-time DotNetNuke contract resource. Charles was immediately put to work abstracting all of the core modules into independent private assemblies. At the same time, he reorganized entry fields in all application user interfaces and added full localization capabilities, including field-level online help.

The concept of localization was one of the most commonly requested enhancements for the DotNetNuke application. Localization actually has multiple meanings when it comes to software applications because there is a distinct difference between static and dynamic content. Static content is information that is delivered as part of the core application typically implemented by developers. Dynamic content is information that is provided by users of the application and is typically entered by knowledge workers or webmasters. In DotNetNuke 3.0, we delivered full static localization for all administrative interfaces. This meant that all labels, messages, and help text could be translated and displayed in different languages based on the preference of the user. Developing a scalable architecture in this area turned out to be a challenging task because the solutions offered by Microsoft as part of the ASP.NET 1.x framework were better suited for desktop applications and had serious deficiencies and limitations for web applications. Instead, we decided to target the ASP.NET 2.0 localization architecture, which better addressed the web scenario. However, due to the specific business requirements of DotNetNuke, we soon realized that we were going to have to take some liberties with the proposed ASP.NET 2.0 localization architecture to enable us to achieve our goals for runtime updatability and scalability in a shared hosting environment. In the end, we were able to deliver a powerful solution that satisfied our business needs and provided forward compatibility to the upcoming ASP.NET 2.0 release.

The optional interface architectural model described earlier reaped rewards in DotNetNuke 3.0 in a number of key application areas. Registration of module actions in earlier versions of DotNetNuke was always less than optimal because they were dependent on page life-cycle events that were difficult to manage in a variety of scenarios. Optional interfaces finally provided a clean mechanism for the core framework to programmatically call into modules and retrieve their module actions. Other new features based on optional interfaces included content indexing, import, and export. In each of these cases, the core framework could rely on modules to provide content in a specific format that then allowed the core framework to provide advanced portal services.

After multiple beta releases (some of which were deemed not fit for public consumption), DotNetNuke 3.0 was officially released on March 12, 2005. Although there were breaking changes between DotNetNuke 2.0 and DotNetNuke 3.0, a number of modules were immediately available for DotNetNuke 3.0 due to the success of a pilot program named “30 for 3.0.” This program was a brilliant strategy of Scott Willhite's and allowed a serious group of commercial module developers to have early access to beta releases of the DotNetNuke 3.0 product, enabling them to deal with any compatibility issues before the core framework became publicly available. Aside from the obvious benefits of having “applications” immediately available for the new platform, this program also provided some excellent business intelligence. It proved one of Scott's earlier assumptions that the vocal forums community represented only a small portion of the overall DotNetNuke user community. It also exposed the fact that DotNetNuke had found its way into Fortune 500 companies, military applications, government websites, international software vendors, and a variety of other high-profile installations.

DotNetNuke 3.0 was released with two supported languages: English and German. Delivering two complete language packs adhered to one of our newer philosophies of always attempting to provide multiple functional examples to prove the effectiveness of a particular extensibility model. Before long, community members began submitting new language packs in their native dialects that were posted on the dotnetnuke.com site for download. The total number of supported language packs soon surpassed 30. This resulted in incredible growth and adoption for the DotNetNuke framework on an international basis.

Read Previous Blog In Series - Open Source Project Restructuring

Shaun Walker has 20+ years professional experience in architecting and implementing large scale software solutions for private and public organizations. Shaun is the original creator of DNN, a Web Content Management System for ASP.NET which has cultivated the largest and most successful Open Source community project native to the Microsoft platform. Based on his significant community contributions he has been recognized as a Microsoft Most Valuable Professional (MVP) since 2004 and an ASPInsider since 2005. He was recognized by Business In Vancouver in 2011 as a leading entrepreneur in their Forty Under 40 business awards, was a founding member of the Board of Directors of the Outercurve Foundation, and is currently the Chairman of the Advisory Council for Microsoft's .NET Foundation. Shaun is currently a Director & Innovation Group Lead for Arrow Consulting & Design.

Shaun can be reached at shaun.walker@siliqon.com.

Shaun Walker
34825 1ST Ave
Abbotsford, BC,
V2S 8C1

 DNN is the most widely deployed open source .NET web content management platform that allows you to design, build, and manage feature-rich websites, web applications, and social communities.

Siliqon is a chemical element that is the second most abundant element on Earth and is best known as the primary semiconductor material in electronic components. Its symbol is "Si" and its atomic number is 14. In its pure state, siliqon is a metal-like substance with an appearance resembling aluminum.