Almost every new technology developed in recent years has been complex, distributed, and built for scale: Kubernetes, Ceph, and OpenStack are a few examples. These systems are quite different from the ones we saw just a few years ago. Practically any non-trivial software solution today comes with loose coupling, asynchronicity, and elasticity—properties usually absent from systems of the past.
People comfortable with building and operating such complex systems are rare and in high demand. This presents a problem for organizations struggling to adopt new technologies precisely because they lack people who understand them: we are dealing with a skills gap, not a technology gap.
This means we need novel ways to enable professionals to familiarize themselves with these technologies. We must provide professional learners with complex, distributed systems to use as realistic learning environments. We must enable them to learn from anywhere, at any time, and at their own pace.
What's the alternative? The alternative is a system that gives learners access to arbitrarily complex, realistic distributed environments on demand. As it turns out, the combination of two "Opens"—Open edX and OpenStack—is an excellent option to provide exactly that.
Open edX is a learning management platform that started at Harvard University and MIT in 2012, with subsequent collaboration from Stanford University. Released under the AGPL in 2013, it rapidly expanded to other universities and also corporations, with Microsoft being a then-unlikely early adopter in 2015. Today, the nonprofit edX Inc. drives the majority of Open edX's development and continues to host the edx.org learning site. The entire platform is open source software and welcomes community contributions.
As of May 2018, edx.org had served approximately 16 million learners through its own and its official partners' sites. At the same time, another 18 million learners were estimated to use independent Open edX based platforms worldwide.
Django all the way
The core of the Open edX platform, its learning management system (LMS)—which, in a bout of creativity, its creators called lms—is essentially a fairly involved Django application. Or rather, a whole collection of applications, reflecting a theme that will no doubt be familiar to many Django developers. Any learner or student interacts with the LMS to access course content, watch videos, take labs and quizzes, and collaborate with co-learners.
Its cousin, the course management system (you guessed it, cms, although there is a slightly snazzier alias available, Open edX Studio) is for teachers, instructors, and course authors. Learners do not interact with Studio, and even for authors, its use is optional. Those who prefer can manage course content in an external content store or a revision control system like Git and import it from there. Like the LMS, the CMS is also a Django application.
For interactions with other machines (rather than humans), Open edX heavily uses the Django REST Framework (DRF). For example, external applications can use the REST API to invoke automated course enrollment based on, say, the purchase of a course seat in a payment system.
XBlocks: A flexible, extensible plugin system
XBlocks are Open edX's plugin system that allows authors to significantly expand Open edX's functionality. XBlocks exist for learning purposes as diverse as building molecular models in chemistry or solving mathematical equations.
The XBlock SDK and API are Apache licensed, so XBlock authors can, in principle, write XBlocks that interface with systems that do not use open source licenses. In practice, most available XBlocks do use Open Source Initiative-approved licenses.
For learning interactively on OpenStack-hosted resources, an XBlock is available that spins up course author-defined Heat stacks on demand and presents either a terminal session or an RDP session right in the learner's browser via Apache Guacamole.
OpenStack is an infrastructure-as-a-service platform whose orchestration component, OpenStack Heat, comes in handy in providing arbitrarily complex lab environments to learners. Using a Heat template, a course author can define an exactly reproducible, self-contained environment consisting of, say, 10 servers in three networks connected with two routers and arbitrarily involved configurations for each server.
Heat has some interesting features that set it apart from its workalikes on other cloud platforms like AWS CloudFormation or Google Cloud Deployment Manager. In particular, Heat has the ability to suspend an entire stack—however complex, in place—and then resume it at a much later date in the exact same state.
This comes in quite handy in the training lab: in self-paced training, learners typically spend 30 to 45 minutes on each lesson and might do one such lesson every day or every other day. Over the course of a month, learners may use their lab for as little as 10 hours in total. Keeping that same lab running over the entire month, at a cost possibly exceeding $1,000, would be entirely cost-prohibitive; however, making the lab available only when needed can drive the price down to double-digits, making the whole endeavor entirely affordable.
By combining the facilities of Open edX—in particular its XBlock plugin system—with OpenStack, a learning provider can give learners the opportunity to explore the inner workings of arbitrarily complex distributed systems in a completely self-directed and very cost-effective fashion. Such a system—comprised of exclusively open source components—can enable organizations and individuals to quickly grow technology skills.
Images in this article are from the OpenStack Deployment and Operations course on the City Cloud Academy platform (which runs on Open edX), co-written by the author. There are 25 seats in this course available every month, free-of-charge, to the open source software community on a first-come, first-serve basis.
Florian Haas will present Learn Complex Skills, From Anywhere: Combining Django, Ansible, and OpenStack to Teach Any Tech Skill at linux.conf.au, January 21-25 in Christchurch, New Zealand.