Open source software can play a vital role in education, especially when it comes to the engineering domain. As engineering involves complex tools and processes to deliver solutions, OSS ensures lower costs and more robust code built on open standards that can be continually peer-reviewed. This helps in effective teaching and the management of academics.
The most important open source software for an institution that is educating engineers are:
- Learning management systems (LMS) and tools
- Code collaboration tools
- Submission tracking and assessment frameworks
- Circuit/MCU simulation tools
- Interactive notebooks and IDEs (integrated development environments)
Though we are talking about engineering education here, many of the open source tools and frameworks discussed in this article are equally applicable to other academic and corporate segments.
Learning management systems (LMS) and tools
Open edX
This is a digital MOOC (massive open online course) framework created by MIT and Harvard, with all the necessary functionalities to deliver and manage content. It has had at least one major release per year ever since its launch in 2013, and has been used by more than 35+ million people. The LMS is based on the Django application framework with Python for the back-end, while Mako, JavaScript and CSS are primarily used for the front-end. MongoDB and MySQL have been used for the database. Multiple interfaces are enabled for external application through LTI (learning tool interoperability) and the edX Xblocks API. The course creation is done in OLXML and is interoperable with easy export and import. The data analytics engine gathers the events and makes insights available with the help of Hadoop and the REST API. Multiple educational institutions and corporates are leveraging the edx.org platform today, or creating their own customised versions, based on their learning needs.
URL: https://open.edx.org/
Moodle
This is one of the oldest frameworks built for a virtual learning environment and its initial release was in 2002. The objective of Moodle is to create online courses for different modes of learning, combined with self-paced learning. Today, it has more than 90 million users and major releases occur twice a year. It is based on PHP, JavaScript and CSS. It is highly extensible due to its modular nature and the plugins. It supports activities, resources, enrolment, authentication and other components of a typical LMS through plugins. There have been many changes in Moodle over the past 17 years. The latest version is Moodle 3.8.
URL: https://moodle.org/
Code collaboration tools
GitLab
Git is a popular source code management (SCM) protocol and supports distributed version control systems (VCS). Most open source projects are currently on Git hosting services like GitHub and others. To leverage the advantages of SCM, we can also host internal Git repos. GitLab is a good option for this with its complete continuous integration (CI) and continuous deployment/delivery (CD) tool chain. The community edition is free and easy to install in any on-premise server or available cloud service. When delivering educational content, GitLab can offer examples with wikis, along with lab manuals documented with version tracking (branches). It can also create groups for collaborative team work and submissions. CI/CD workflows can be integrated for build checks, issue trackers, to check code quality parameters and to present different dashboards.
URL: https://docs.gitlab.com/
Jenkins
This is a leading automation server with a rich set of plugins for engineering programming languages like C, C++, Java and Python. For the purpose of education content delivery, CI/CD pipelines can be set up to perform particular tasks, which include platform-specific builds, various code quality checks like static analysis, heap error detection, code complexity and standard compliance. xUnit frameworks can be integrated to perform unit and integration testing, and coverage. Also, rich dashboards and trending charts are supported to visualise the changes, based on the build.
URL: https://jenkins.io/
Submission tracking and assessment engines
Submitty
This is an open source programming assignment-submission system developed for programming courses in engineering institutes. Submitted code can be evaluated manually as per predefined rubrics or automatically against test metrics. It comes with a rich set of plugins for various checks on programming assignments like compilation, execution, coding style, static analysis, and memory leak detection for automated assessments. Scores can be configured for each of the desired parameters. We can check the functionality of the code with the help of the available xUnit framework. The evaluation can also be configured as a combined score in dual mode, i.e., some parameters get checked automatically and some manually. This framework helps the engineering faculty to set up formal assessments and programming challenges.
URL: https://submitty.org/
Codeboard.io
This is a Web based IDE for teaching programming modules. Examples can be created for sharing with students, or one can create blank/partial code and encourage students to submit the completed solutions. Examples in popular languages like C, C++ (up to C++14 std), Java and Python (with support for unit testing in the latter two) can be created. Codeboard.io can be hosted internally through Docker images. It can integrate with popular LMSs in engineering education through LTI plugins.
URL: https://codeboard.io/
TAO Testing
TAO is a next-generation open source assessment framework, with support for single sign-on and LTI. It can easily integrate assessments with popular LMSs. It is Question and Test Interoperability (QTI) compliant and has a great degree of interoperability with other LMS solutions. It offers a strong role based access matrix to define privileges for various roles like admin, test author, invigilator, student, etc, for hosting and managing the assessments, which can be objective questions using multiple choice or ‘mix and match’ questions.
URL: https://www.taotesting.com/
MCU simulation tools
Qemu
This is an open source emulator with support for various architecture families. It allows full system emulation with GUI and network support. The GNU MCU Eclipse project comes with a customised version of Qemu, which can emulate additional MCU targets like the STM32 family with Eclipse plugins for a complete development cycle. From mid-2019 onwards, these custom Qemu binaries have been part of the xPack project. Do refer to a previous article in OSFY for more details on the GNU MCU Eclipse project (https://www.opensourceforu.com/2017/12/developing-arm-targets-using-gnu-mcu-eclipse/).
URL: https://xpack.github.io/qemu-arm/
mbed Simulator
ARM mbed OS is a free, open source embedded operating system designed for various ARM Cortex-M based targets. It comes with a rich set of drivers for various sensors, I/O devices, connectivity with a powerful networking stack, RTOS APIs and security. Recently, a Web based simulator has been introduced. It can run various examples with sensor interfacing and networking through mbed APIs.
URL: https://labs.mbed.com/simulator
Interactive notebooks and IDEs
Jupyter Notebook
This is an open source Web application, formally known as IPython. It allows users to create and share documents with live code, equations, graph plotting and documentation. Though Jupyter is designed primarily for Python, it supports various kernels for C, C++, Java, JavaScript and other languages. Xeus-cling is a Jupyter kernel for C++, based on the Cling interpreter. For engineering education, it provides an interactive way to learn complex algorithms and fundamentals in different programming languages through Notebooks.
URLs: https://github.com/jupyter/jupyter/wiki/Jupyter-kernels; https://xeus-cling.readthedocs.io/en/latest/
PythonTutor
This helps in overcoming a fundamental barrier to learn programming by running code line by line, by code tracing, and the visualisation of the stack and heap. The Web service allows visualisation of code snippets that can be embedded into other services through Iframe. It supports other programming languages apart from Python, like Java, C, C++, JavaScript and Ruby. More than five million people have used the service to visualise over 100 million pieces of code, often as a supplement to textbooks, lectures and online tutorials.
URL: http://pythontutor.com/