The Oberon programming language is also a very nice alternative to C - smaller, safer and easier to learn. It can be used without the Oberon operating system.
I think Oberon doesn't have the community to thrive though. A language nowadays is much more than the core, it's also all the libraries, tooling and tutorials around it.
That said, Oberon probably makes a very fine teaching language.
I still have a soft spot for Modula 2. Very nice language.
As a teen I learned Modula 2 before learning C. I bought a Modula 2 compiler for my Atari ST instead of a C compiler. In retrospect this may have been a mistake; the ST's OS was designed with C calling conventions in mind, with a lot of void casting, etc. All the documentation also implied this/ Using it from Modula 2 was a pain.
And then later when I learned C, I found many aspects very ... disturbing... after coming from the Wirth language world.
University of North Dakota replaced Pascal with Modula-2 for their CompSci classes starting in the Summer 1988 semester. It was taught on their IBM 370. I found Modula-2 to be great for some things, but its I/O was horrible. I don't think that was a function of the 370.
C is really primitive compared to Modula-2's modules. It just feels (and I guess is) hacked instead of a well thought out design.
Python as well. The module system and the exception-handling system were mostly lifted from Modula-3, and the class/object system is a hybrid of Modula-3 and C++ (something that's still explicitly stated in Python's documentation to this day [0]).
If you first thought on reading that was "But Python's exception-handling system looks like everyone else's, how can it be lifted from this obscure language?", that's because everyone else lifted it from Modula-3 as well. That's right, C++ also borrowed Modula-3's system, and Java and C# built on top of that. Pretty much the whole mainstream concept of exception handling was invented by Modula-3.
This is true, but Rob Pike has his own independent connections to Oberon. Acme and other parts of Plan 9's mouse-driven UI were greatly "inspired" by the Oberon system.
Go is the secret child of Oberon-the-language and C. Before Go, Plan 9 was conceived as the secret child of Oberon-the-system and Unix.