XModule → XBlock Conversion Complete!

It is with great excitement that I announce that the last XModule has been removed from edx-platform! The last converted XModule was TranslateCustomTag, and the last deleted XModule was SemanticSection (as part of DEPR-124).

Wait, what was XModule?

XModule was original mechanism we used to create different course components in edx-platform, and was the predecessor of XBlock. When XBlocks were introduced into edx-platform, it was made so that XModule became a subclass of XBlock that added enough in the way of compatibility shims.

Why is this important?

XModule and XBlock saw the world very differently, and bridging these conflicting views into a single system led to a great deal of complexity (DescriptorSystem/ModuleSystem/CombinedSystem) and redundant systems for things like static asset handling. Back in 2013, we dubbed this intermediate running state “peak confusion” to express the idea that it would be an extremely confusing time for the courseware internals, but that we could eventually come down from that complexity once XModules were removed. That took a lot longer than we had hoped, but we’re finally at a point where the conversion is complete and Lilac will have no XModules in it. This clears the way for a major simplification of the underlying system.

How did this happen?

Back in 2013, @cpennington first charted the path for descending peak confusion. The first XModule to be converted came out of a hackathon project led by @doctoryes, with help from @nimisha, @cpennington, @nedbat, and others. @sarina and @Diana_Huang’s DEPR efforts eliminated a number of lesser-used XModules.

The LabXchange project (Harvard/OpenCraft) led to our “big three” XModules getting converted–HTML, Video, and Capa (ProblemBlock).

The rest of this difficult, painstaking work was finally completed by a months-long blended development effort (BD-04) that converted fifteen more XModules (+ a separate DEPR). This development work was once again done by OpenCraft, with members of the edX T&L team providing reviews (@kmccormick, @stv) and other support (@marcotuts, @sarina).

I want to give special recognition to the OpenCraft folks who helped make this happen over the years, and up through BD-04:

I also want to give a special, special recognition to the fearless hero of this endeavor who has worked tirelessly to push this technical effort across multiple projects over the years: @usman! As anyone who has worked on courseware internals knows, this is an extremely difficult part of the code to untangle, and @usman personally drove the bulk of this work. It is a testament to both his diligence and deep platform expertise that BD-04 was delivered smoothly, and without known regressions.

This is something I’ve wanted to see happen for eight years now. From the bottom of my heart: THANK YOU ALL!!!

Great! So we’re all good now?

Not quite. This was a critical first step that unblocks us from vastly simplifying the courseware infrastructure code, but more work needs to be done in order to capitalize on these efforts and remove these now redundant mechanisms. I hope to give updates on that in the months to come.

For now though, let’s enjoy this win for the platform. :smile: Take care folks.


wow this is impressive - I distinctly recall what a massive effort this has been. Well done :slight_smile:

So glad to see this happening.

Join us on 1 April to celebrate this great milestone!!