Table of Contents
Open Projects
Welcome! Whether you're here because of Summer of Code (SOC) or just want to scratch an itch to hack, we invite you to peruse our projects and ask about them on the RTEMS mailing list or Discord. If you plan to submit a proposal to do something for the RTEMS Project as part of a SOC, see Getting Started for GSoC. RTEMS projects span kernel hacking, adding support for a new board (BSP), improving the development environment, developing tests, and more. You should look through the projects and see if any look promising to you, and then ask questions preferably on the devel mailing list about the ones that interest you. The current open projects list may need to update slightly for work that has been done, or that is not desired any more. If you're interested in a category of projects but no specific ones, you may also inquire about other ideas from the community within that category.
If you want to get your feet wet with RTEMS then check out our small projects page where you can find projects that require little coding skill and are appropriate for those new to RTEMS or open source software projects. If you are interested in one of these projects but are not able to code and test it yourself, consider sponsoring one of the core RTEMS developers to do it for you. Volunteering or sponsoring is how things get done -- users keep RTEMS development alive!
Most of these projects will take between a few weeks and a few months of effort by a person who is familiar with the general use of GNU/Linux and GNU tools. Many RTEMS projects are done by student or volunteer contributors, so we try to define incremental projects or subtasks that can be completed and committed individually. Most of the projects are feasible as a Summer of Code project. Since some projects have multiple steps, contributors should work with prospective mentors to define the scope of work in their proposal. Similarly, some projects might be a starting point for a class project or graduate thesis. We generally underspecify our project descriptions for students and new contributors on purpose. The scope that can be accomplished in the timeframe varies depending on individual contributor's experience and skills. So, we like to let new contributors explore the projects and discuss with potential mentors in order to shape the proposal in a way that suits the contributor's and mentors' interests with a scope that is appropriate.
Overview
The order of projects in the ticket list does not reflect their importance, difficulty, or feasibility. Our project list is not exclusive: if you have an idea, solicit feedback from the project's mailing list or Discord channel?; many developers sit in Discord and check it (and their email) infrequently throughout the day, so be patient! There may or may not be enough work on a project to constitute an SoC project, and some of these are past SOC projects. If you are interested in one of these, please ask on the mailing list or Discord.
Adding Projects as Tickets
Open projects are managed as Trac Tickets. To create a new project:
- Create a new ticket by clicking on New Ticket.
- The Summary field of the ticket is the title of the open project.
- The Description field of the ticket is the project detail. Please use the WikiFormatting to enhance the readability of the project's details. If you are not sure please review existing open projects as an example.
- Set the Type field of the ticket as "project". This would have already been filled if you clicked on the New Ticket link above.
- Set the Milestone field to be "Indefinite". This would have already been filled if you clicked on the New Ticket link above.
- If this is a SoC Project one of the mentors of the project should be mentioned in the Owner field and you should CC the rest of the mentors. If no mentors are mentioned, keep the fields blank.
- The Keywords field should be set to "SoC" denoting any projects that can participate in the Summer of Code. The keyword is case sensitive.
- You also need to set one of the following as a Keyword (comma-delimited) to define the project type, one of: testing, ecosystem, kernel, statistics, BSP, API, libbsd, languages, libraries. Please ask on the mailing before adding new keywords, as they are used to create the tables below.
- Then you need to add another keyword, either "large" or "small" to denote whether project scope is anticipated in the 350 hour or 175 hour range.
- Select an appropriate component for the Component field.
If you are unsure about anything, please ask on the RTEMS Users mailing list.
Project Ideas List
Open projects are held in Trac as Trac tickets. The list can be viewed using the SoC Project Report.
If one of the projects sounds interesting, but lacks detail, ask on the RTEMS Users mailing list for details and we can all help scope the project.
The owner field indicates a possible primary mentor for the project.
The list in no specific order is:
Board Support Package (BSP) Projects
Large (~350 hour) Scope
Medium (~175 hour) Scope
Testing Projects
Testing a large body of software like RTEMS is in a continual state of improvement. There is always a need for more test cases and easier ways to run them all and decode the results. In addition, we want to be able to run all tests on as many hardware and simulator configurations as possible. Testing doesn't sound exciting to most people but when you combine the breadth of what we need to test with our desire for 100% instruction and branch path coverage, you get some very interesting and challenging work.
Large (~350 hour) Scope
Ticket | Summary | Owner |
---|---|---|
#2927 | RTEMS Testing Tool Project | |
#3690 | Add support for Eclipse Target Communications Framework (TCF) | |
#4182 | Port Rust to RTEMS | |
#4593 | Add support for renode.io Simulator |
Medium (~175 hour) Scope
Development Ecosystem Projects
RTEMS applications are cross-compiled on a development host to produce executables that are transferred to and executed on target systems. The projects in this section focus on the host side of that equation. This means they will run on a developer's computer and possibly communicate with embedded hardware.
Large (~350 hour) Scope
Medium (~175 hour) Scope
API Layers Projects
Large (~350 hour) Scope
Ticket | Summary | Owner |
---|---|---|
#2832 | Google Go run-time library support needs an update | |
#2966 | POSIX Compliance | |
#3338 | Port CHFS to RTEMS | |
#4563 | Add long double math methods to newlib |
Medium (~175 hour) Scope
Executive (SuperCore, SuperCoreCPU, libcpu) a.k.a. kernel
Large (~350 hour) Scope
Ticket | Summary | Owner |
---|---|---|
#2966 | POSIX Compliance | |
#3850 | Modular Network Stacks | |
#4640 | Add RSB Support for CivitWeb | |
#3750 | Add Classic API Barrier "get number waiting" Service |
Medium (~175 hour) Scope
Runtime Statistics Projects
Large (~350 hour) Scope
Medium (~175 hour) Scope
rtems-libbsd
Large (~350 hour) Scope
Medium (~175 hour) Scope
Ticket | Summary | Owner |
---|---|---|
#4213 | libbsd: Reduce footprint of minimal buildset | |
#4880 | Build List Visualization |
Full List of Projects
Project Descriptions Not Converted to Tickets
We used to describe open projects using a link to the project page and a short text description, but now we use tickets to describe open project ideas. Many of the projects that have interest from a mentor or the community have been converted. The remaining project descriptions in this section have not been converted yet, but may still be of interest. Please ask on the devel@… mailing list if you have interest in any of these projects. Project descriptions that are determined interesting should be converted to a Trac Ticket, while the descriptions deemed uninteresting should be moved to the Obsolete Projects section at the bottom of this page.
Projects in Italic text are space-oriented and therefore suitable for SOCIS.
- Testing
- RTEMS Test Specification - Develop a formal test specification.
- RTEMS Test Screen Validation - Create a tool to validate test output.
- Testing of the GNU Tools - Improve Tools Testing on RTEMS targets
- RTEMS Test Template - Improve automatic generation of tests.
- Fault tolerance - get a fault injection tool to work with RTEMS and create tutorials and examples.
- Development Ecosystem
- Config GUI (Python) - GUI for configuring RTEMS build.
- Build Variables (Python) - Add bounds checking for all build options as well as cleanup.
- Improve RSB (Python) - General improvements to the RTEMS Source Builder.
- Python GDB Support (Python) - Add Python Script support for debugging RTEMS with GDB.
- Static Analysis of Stack Usage - Develop a tool for static analysis of stack usage.
- Improve Eclipse Plugin - Improvements in the RTEMS Eclipse Integration.
- Using clang - Compiling RTEMS with CLANG.
- eVisual Studio - Integration of RTEMS cross development environment into eVisual Studio.
- Executive (SuperCore, SuperCoreCPU, libcpu): a.k.a. kernel
- Improvements to SMP support - Propose an improvement to the existing SMP capabilities.
- Unified Interrupts - Unify the interrupt and PCI interfaces.
- TinyRTEMS - Improve some aspect of TinyRTEMS.
- Paravirtualization- Make RTEMS suitable to run as a guest in a hypervisor.
- Run-Time Statistics
- CPU Statistics - Improvements to CPU Usage Statistics.
- Stack Checker - Improvements to Stack Bounds Checker.
- Board Support Package (BSP)
- x86 Edison? - on hold due to unavailability of open information
- API Layers (POSIX, Classic, SAPI)
- OSEK - Implement OSEK automotive APIs.
- Programmable Logic Controller - Enable RTEMS as a Programmable Logic Controller (PLC).
- ARINC653 in RTEMS - Implement ARINC-653 avionics APIs.
- rtems-libbsd
- This is a very active area in the RTEMS Ecosystem with features and drivers added regularly. Ask about possibilities which as or November 2020 include Ethernet over USB and improving Wifi support.
- USB stack - Ask about possible addition of other device types.
- Languages
- Mono On RTEMS - Add support for Mono.
- Port V8 JavaScript Engine to RTEMS - Add support for the V8 Engine.
- SWIG on RTEMS - Add support for SWIG.
- Libraries and Applications
- Projects/Open/InternetOfThings Internet of Things (IoT) - Port IoT infrastructure
- Port Monkey HTTP Server - Port the Monkey HTTP Server.
- Port Transparent IPC - Port Transparent IPC (TIPC).
- Line Editor. Implement a simple line editor. Existing code can be refactored for a starting point.
- RTEMS Toolkits - Define a generic (RTEMS Source Builder based) infrastructure for building and maintaining toolkits.
- Turn the current port of LWIP into a first class citizen that RSB can build. Submit port, make target independent, create maintenance plan.
- Rock on RTEMS - Improve the existing port of Rock on RTEMS.
Retired Projects
The following projects are complete or pending.
- Testing
- Tools
- Application Configuration GUI.
- Python Coverage Reporting (Python) - Convert coverage reporting to Python and integrate into RTEMS Tools.
- GCov Reports - Use gcov output as generated by covoar to generate useful reports.
- GProf Reports - Use gprof output as generated by covoar to generate useful reports.
- GDB Coverage - Add execution coverage logging to the GDB simulators used by RTEMS.
- Improve GDB Simulation - Fixing some issues in GDB Simulators.
- Simulator Updates - Find and fix problems in BSPs that target simulators.
- ArgoUML - UML for RTEMS.
- Runtime
- Classic API Atomic API
- Condition Variables (CV)
- Sixty-Four Bit Timestamps
- Refactor the filesystem infrastructure
- Use Maps or Hashes in the implementation of Classic API Notepads and POSIX API Keys.
- Bdbuf improvements. The current block device buffer implementation can benefit from a number of improvements.
- Improve the RTEMS SuperCore Scheduler
- kqueue(2) or taskqueue(9) is a project to port the kqueue(2) or taskqueue(9) API from FreeBSD.
- ISO9660 file system
- POSIX Asynchronous IO. POSIX Asynchronous IO should be nearly done, with perhaps a little more work to do. POSIX List IO is not currently implemented. This would involve implementing and fully list IO per the POSIX specification as well as completing the Asynchronous IO. First step work is to save the state of the project as a report under the appropriate GSOC/YYYY year topic.
- Languages
- Parrot On RTEMS
- RTEMS port of the GNU Java Compiler (gjc)
- Lua in RTEMS
- Porting RTEMS to OpenRISC.
- Nested Mutexes: See Ticket #2124 for a problem description.
- RTEMS Sequenced Initialization - Initialize RTEMS dynamically, conceptually like C++ global constructors.
Obsolete Projects
Some projects have been proposed that are viewed as being of minor use. This list is meant to provide a way to avoid wasted effort on projects that are not widely desired. However, projects on this list might still be useful to someone, given a motivated individual to work on them.
- Various ideas have been proposed related to using RTEMS as a hypervisor. The lack of protected (kernel mode) execution precludes any feasible implementations.
- Merge BSP for Simplescalar simulator. The BSP is heavily bit-rotted and the simulator is a dead project.
- Rosetta OS OS Independent Device Driver API.
- Implement current version of µITRON Interface. itron support was removed from RTEMS due to lack of interest.
- More NIC device drivers for the old networking stack. Instead ask what is needed for the RTEMS libbsd code base.
- Integrate CEXP into main RTEMS distribution. Possible licensing issues, please apply to the RTL project instead.
- Scripts and documentation for creating and installing prebuilt tool packages Building Tool RPM Packages, Debian Packages, MacOS tools, MinGW Tools for Windows, Canadian Cross Compiler. Please apply to the RSB project instead.
- Rump Kernels - Provide the hypercall interface for Rump Kernels in RTEMS. Instead, we prefer to focus efforts on improving the libbsd.