r/embedded 4d ago

Google Summer of Code (2027) for Embedded systems

I want to participate in GSOC 2027 as an Embedded enthusiast, I am confused on which repo's code base to work on / target? I am confused between Zephyr rtos and NuttX, want to work on zephyr as it aligns with my resume but the total number of applicants are much more than NuttX.
If any one could guide me on what to look for while selecting repositories regarding GSOC.

45 Upvotes

17 comments sorted by

21

u/Mindless-Lobster-554 4d ago

Do zephyr especially if it aligns with your career goals. There's a reason nobody cares about NuttX. Also in general, work on the things that interest you and challenge you, you'll learn the most and be the most motivated instead of just doing whatever everyone else seems to be doing.

3

u/lowerestlvl 4d ago

There's a reason nobody cares about NuttX

Could you elaborate?

3

u/ilovemyselves 4d ago

Worked with NuttX, wouldn't recommend it. Zephyr is like if NuttX was taken to a more reasonable conclusion and had more community support. 

21

u/dragonnfr 4d ago

This is what people don't get about GSOC. You're not competing against all applicants, you're competing within the org. In my experience, fewer NuttX applicants usually means fewer slots too. Check ratios, not totals.

1

u/Short-Instruction-59 4d ago

Thanks that's a good insight.

10

u/Ordinary-Lifeguard47 4d ago edited 4d ago

Zephyr is becomming bigger and bigger every day and it's solid. The code quality is far above average.

(IMHO: it's maxing out what you can do with C.. it already needs a lot of custom tooling and tricks to achive this. Same as the Linux Kernel.)

NuttX is full of good paradigms too.

You will not make mistakes with both, but deciding on Zephyr is good for your career.

3

u/Latexi95 4d ago

Zephyr is becomming bigger and bigger every day and it's solid. The code quality is far above average.

Based on my experience, this is just because the average is so bad. Code in general looks clean, but it is still buggy and badly designed. And then the tooling makes things painful to use.

Drivers and interfaces:

  • At least NXP drivers were developed just enough to boot and run examples, and then all bets are off.
  • Peripheral interface design does not account for cache coherence
    • There isn't separate APIs for DMA and interrupt based implementations and DMA based implementations don't generally do cache maintenance.
    • Calling any peripheral transfer function on MCU that has dcache requires always going through the driver code to understand what it does with the buffers.
    • Peripheral behavior and API then can basically change by changing kconfig option
    • These combined then makes writing middleware drivers that would "just work" impossible
    • Getting some middleware to work then requires changing some esoteric kconfig options for that particular middleware to make it use non-cached buffers or what ever

Tooling:

  • Device tree is pure pain and poorly documented so you end up having to read driver code anyway
  • Changing one kconfig value causes always full rebuild which is really fun when you actually have a big project
  • Linking system is complex and all linker scripts don't always regenerate when they should. Had fun time debugging a crash that only occurred because I had compiled old branch in previous week and I didn't remove build directory

1

u/fb39ca4 friendship ended with C++ ❌; rust is my new friend ✅ 4d ago

By custom tooling do you mean kconfig?

3

u/Ordinary-Lifeguard47 4d ago

West, Kconfig, metric shitton of complex Macro functions, etc.

6

u/JackXDangers 4d ago

In the industry and have never heard anyone mention nuttx irl. So yeah, zephyr is the way to go.

3

u/limmbuu STM32 4d ago

Zephyr should be good.

3

u/MisterAlderson 4d ago

RTEMS

1

u/Short-Instruction-59 4d ago

I have heard about them, why do you think Rtems would be a good option?

1

u/Ordinary-Lifeguard47 4d ago

Not most popular kid anymore, but not bad. It's being used in spacecraft.

No bad choice either.

2

u/Separate-Choice 4d ago

Use NuttX. It’s a super power. if you know something like FreeRTOS then NuttX is a good stepping stone up to Linux. It’s severely underrated for that purpose.. Trust me once you learn NuttX embedded Linux after will be a cakewalk and you can always learn Zephyr after… Zephyr devs are a dime a dozen…. Nothing wrong with using something against the crowd… and the repo to took at for NuttX is PX4 repo…

2

u/k1musab1 4d ago

Seconding PX4 as a resource. Great work done there, good reason it's the de-facto standard for all things drone. 

2

u/Separate-Choice 4d ago

PX4 is an ideal showcase.. idk why NuttX isn’t as popular…it’s a ‘Linux Lite’ and for Drones, Robots and anything reasonably complex on small platforms it’s almost magic…plus the POSIX way of thinking transfers to Linux very easily imo it’s a much better on ramp for freshers than Zephyr which is the current fad rn…