Inspiration

Initially, our goal was to be able to port a JPEG XL format library to QNX, recognizing its potential as an underutilized yet powerful compressed image format. JPEG XL offers high-quality resolution while using roughly half the space of typical formats like PNG, making it an excellent choice for embedded systems where efficiency and storage are key. After looking at the challenges, we overpicked a few too many apples from the tree, going for the QNX Software, School-Crossover, First-Timer and Brain Rot challenge by trying to integrate JPEG XL with QNX as a proof of concept by rendering Bad Apple on a raspberry pi using this format. However, as the project unfolded, we encountered roadblocks that ultimately led us to pivot—but not before learning a lot in the process.

What it does

Despite our original plan, we successfully created a working Bad Apple render using OpenGL on macOS. Unfortunately, porting this to QNX proved to be a bigger challenge than expected. While our initial ambition was to showcase JPEG XL rendering on QNX, we ultimately pivoted to just simply displaying Bad Apple to not leave without having a submission. Hope you like Bad Apple!!

How we built it

The plan was simple in out minds - breaking down the tasks into

  1. Figure out how to compile and execute code on raspberry pi
  2. Experiment with the QNX Momentics IDE
  3. Learn OpenGL and render Bad Apple!!
  4. Convert existing image file types into JPEG XL’s

We were able to kinda accomplish each task we set out to do on its own, but trying to merge our findings felt like comparing oranges to apples.

Challenges we ran into

  1. Setting up QNX proved to be more challenging than expected
  2. Cross-compilation made it difficult to port our work across different operating systems
  3. The Google test framework for QNX had compatibility issues that slowed down our progress.
  4. Unable to get OpenGL libraries to work with QNX, tried pivoting to OpenGL ES without being able to run tests.
  5. Time constraints forced us to pivot before we could fully implement JPEG XL, 12 more hours and we would’ve nailed it.

Accomplishments that we're proud of

Even though we didn’t fully achieve our original goal, we’re proud of what we accomplished:

  1. Successfully rendering Bad Apple!! using OpenGL on macOS.
  2. Learning OpenGL from scratch and implementing a working example.
  3. Overcoming major roadblocks through persistence and creative problem-solving, having major Eureka moments.
  4. Completing a meaningful project, despite our limited experience with QNX and embedded systems.
  5. Trying multiple approaches and staying resilient when things didn’t go as planned.
  6. Coming up with a novel and meaningful idea for a project on the fly.
  7. Joining and learning tech workshops, networking, socialising, eating way too much pasta, cracking cybersecurity challenges, playing games, enjoying the hackathon experience.
  8. Successfully LOCKED-IN.

What we learned

Embedded systems are no joke. The complexity of QNX and its ecosystem gave us a newfound appreciation for low-level development. Being ambitious is inspiring—but knowing when to pivot is just as important. Had we chosen a slightly smaller scope, (or figured the things we found out earlier) we might have had a more complete final product. Cross-compilation is hard. Porting software across multiple platforms comes with unexpected challenges, especially when dealing with an OS like QNX. Every roadblock is a learning opportunity. Even though we didn’t fully achieve our goal, the knowledge and experience we gained were invaluable.

What's next for Bad Apple!! (Almost on QNX)

Getting Bad Apple!! (in JXL format) to run on QNX on a Raspberry Pi—eventually.

We set out to explore something new, push our problem-solving skills, and—ideally—build something that actually compiled. While our initial vision didn’t fully materialize, we’re proud of what we accomplished. Setbacks didn’t stop us; instead, we adapted, learned, and persevered. The project didn’t go exactly as planned, but we had a blast experimenting, learning, and embracing the challenges. And in the end, we didn’t let a few “bad apples” spoil the experience. We walked away with new skills, valuable insights, and an even greater enthusiasm for future projects—because next time, we’ll reach for the stars, even if we fall, we’ll pick apples up.

Built With

Share this project:

Updates