The GNAT Academic Program (GAP) is AdaCore's bridge to universities: capstone projects, course support, reference hardware, and the open-source Ada/SPARK libraries that come out of them. Everything public lives in this organization.
- Program coordinator: Olivier Henley
- Students and professors working with us: book meetings directly through the calendar booking link instead of emailing for a time slot
- Community chat: GAP Discord
- Capstones. Each year we publish a slate of senior-design projects (embedded, systems, tooling, FPGA). Teams pick one, fork the seed repository, and build for the year. Proposals for 2026-2027: capstones_proposals_2026-2027.
- Course support. Educators teaching Ada/SPARK get tooling help, course material, and access to program hardware.
- Reference hardware. Freya, an open-source Artix-7 + RP2350 FPGA dev board designed for the program, plus supported MCU boards (STM32F746G-DISCO, Nucleo-G431KB) and the NEORV32 RISC-V softcore.
- Libraries. GHAL, a generics-based bare-metal Ada stack (stm32f746_ghal, stm32g431_ghal, ghal_examples), neorv32-hal, and assorted drivers and protocol crates, all published as Alire crates.
- Pick a proposal from the current year's list.
- Fork its seed repository from this organization. The seed holds the core architecture, fundamental types, and a README. Your fork is your project for the year; there are no upstream pull requests during the year.
- Book a kickoff meeting through the booking link.
- At year end, the strongest work is folded back into the seed with credit.
Ada idiom matters. Reviews check for C-style Ada (raw access types everywhere, integer soup, no contracts). SPARK is scoped: contracts on everything, SPARK_Mode on specs, full proof on each project's small kernel.
- Learn Ada and SPARK, the official course
- Ada Forum
- Awesome-Ada, curated ecosystem list
Linux (Ubuntu LTS) is the tested path. Windows and macOS work.
Alire is the Ada package manager and toolchain installer.
Linux / macOS
curl --proto '=https' --tlsv1.2 -sSf https://www.getada.dev/init.sh | sh
Windows
Download and run the installer from the Alire releases page. Note the install folder it shows you (default is under C:\Program Files\alr).
The installer does not put alr on your PATH. Do it once, in PowerShell, using the folder from the previous step:
setx PATH "$env:PATH;C:\Program Files\alr\bin"
Close and reopen the terminal.
Verify:
alr --version
By default, Alire stores every dependency in a shared user cache (~/.local/share/alire/releases/). We want each project self-contained: all its dependencies live inside the project folder, under alire/cache/dependencies/. A project can then be zipped, moved to another machine or handed in as is, and it still builds. Two projects can also depend on different versions of the same crate without interfering with each other.
Run this once:
alr settings --global --set dependencies.shared false
Every alr init, alr get or alr build from now on deploys dependencies into the project.
If you already have projects on disk, go into each one and refresh it so its dependencies get redeployed locally:
alr update
alr toolchain --select
Pick gnat_native and gprbuild. For ARM targets, run it again and pick gnat_arm_elf.
Crates in the community index: alr with <crate> as usual.
Crates not yet published: depend on them straight from GitHub in your alire.toml.
[[depends-on]]
stm32f746_ghal = "*"
[[pins]]
stm32f746_ghal = { url = "https://github.com/GNAT-Academic-Program/stm32f746_ghal" }Or from the command line:
alr with stm32f746_ghal --use=https://github.com/GNAT-Academic-Program/stm32f746_ghal
Install VS Code and the Ada extension:
code --install-extension AdaCore.ada
OpenOCD for flashing and debugging:
sudo apt install openocd
(macOS: brew install openocd. Windows: xPack OpenOCD.)
alr get --build hello
cd hello*
alr run