Remove the single most confusing aspect of the XBlock runtime (descriptor vs. module system).
Simplify Serialization Code
Remove redundant serialization mechanisms used in import/export, another common source of bugs and developer confusion. This came up as an issue in recent import OLX validation work.
Separate XBlock instantiation from data initialization, to more cleanly decouple the storage layer and allow for a smoother transition to Blockstore (as well as more LMS-optimized storage in the future).
Prune Unused XModule-specific Code
Make the courseware internals more reliable and approachable for developers by removing special case handling, deleting redundant classes, and normalizing terminology.
Improve build times for static asset compilation.
Remove a lot of the complex magic of the runtime, like ProxyAttribute.
Discovery: XBlock Static Asset Modernization
Unify DescriptorSystem and ModuleSystem
Use Existing XBlock Services Instead of ModuleSystem APIs
In cases where equivalent capabilities are provided by existing XBlock Services, all code in edx-platform and other relevant repos will be updated to use those instead of the deprecated ModuleSystem APIs.
Create XBlock Runtime Services
XBlock Runtime Services will be created for all remaining ModuleSystem APIs. Any code in edx-platform and other relevant repos using the legacy APIs will be updated to use the Services instead. This will give a consistent, predictable interface between XBlocks and Studio/LMS, instead of the haphazard platform imports that sometimes happen today.
Remove Unused ModuleSystem APIs
Some APIs were added to the ModuleSystem many years ago for specific XModules. Any unused ones will be removed.
Migrate to Simplified XBlockRuntime Class
Once the above are complete, the DescriptorSystem, ModuleSystem and shim code will be replaced by the simplified XBlockRuntime class. LMS and Studio will be updated to use it.
Simplify XBlocks Serialization
Remove Unused Logic
There is unused serialization and deserialization logic in the code. This includes logic in a number of places which was added in 2012 to handle import of specific courses into MongoModulestore from the XMLModulestore, both of which were deprecated by 2015.
Update Serialization API
add_xml_to_node() is the official XBlocks API for serializing an XBlock data into XML. The converted XBlocks will be updated to use it and the legacy shim code will be removed.
Update Deserialization API
parse_xml() is the official XBlocks API for parsing OLX data. The converted XBlocks will be updated to use it and the legacy shim code will be removed.
Split Parsing and Instantiation
The parsing API does not distinguish between "instantiating a block, and initializing its fields with values parsed from XML" and "an instantiated XBlock is writing new values into some of its fields”. This forces us to use fragile hacks to make the BlockstoreRuntime to work properly. Once the legacy APIs and shim code have been removed, the parsing and instantiation will be refactored into separate explicit steps to allow getting rid of these hacks and simplify future work including creating Blockstore based storage for courses.
Prune Unused XModule-specific Code
Remove XModule-specific Static Asset Handling
There is an entire layer of deprecated static asset management methods that will only confuse developers. Removing this will improve static asset build times, reduce the complexity of the static build process, and remove a source of confusion for new developers.
Remove Unnecessary Modulestore-internal Classes
With XModule compatibility no longer necessary, there are a number of classes that can be removed entirely, simplifying the codebase. Some bits of them may need to be moved to other classes:
There are many ways to refer to XBlocks in the system: XBlocks, blocks, descriptors, modules, items. Applying consistent conventions throughout the edx-platform repo will make the code and documentation more approachable.