Leaving ubiquity and popularity and availability aside, what is it about C that give it any kind of status as a systems programming language?
I think it was the concept of a pointer *, which often resolved to a memory address, and that address could be just about anything. Fun things like **thing were simple to write (but maybe not so simple to understand). Also the inclusion of all bit operators and/or/xor/shifts. The standard library includes system type functions like malloc(). A lot of C maps well to machine instructions. And the lack of any nanny code like array bound checking made it fast (but dangerous).
It persists because it is still dangerous. Many languages try to avoid the danger and impose rules that are 95% helpful and 5% frustrating.
In my opinion.
So this potential new language will have pointers but also
offsets. That is we'll be able to manipulate the address of a datum and also the offset of a datum relative to some base. This is a powerful feature lacking in C.
Changing the subject for a moment I once designed a fast in memory database technology that ran on Windows. This leveraged memory mapped files, so a "database" was in fact a snapshot of a portion of process address space, say 16GB for args sake.
That memory consisted of a tree of data structures, quite complex with index trees and all kinds of data with pointers to other data all situated within that 16GB contiguous block.
But any process could map that file into any part of its address space (this was shared memory, multiple processes could access it concurrently), the OS decides where to map such data into the virtual address space as and when a process maps it and that actual address within each process can vary (one can force it to map at some specific address but that's hardly a good idea).
Therefore in the data the links could not be stored as pointers and referenced and dereferenced as pointers, the tree nodes had to store an offset (from the start address of the 16GB block).
Then at runtime (using C macros) we referenced and deference using the offsets, the macro did the arithmetic to compute the actual process relative pointer).
If C had offered me the ability to use language supported offsets directly, all of that plumbing would vanish, and the cost of calculating pointers/offsets would have all but vanished, being done wholly in the addressing code generated by the compiler.
PL/I
always offered that and the example I give, although not directly applicable to an MCU, is a real world example of how such a feature is valuable.
So we'll be able to write code that can load a linked list into memory (perhaps from disk or somewhere) and have that linked list 100% relocatable, the actual address that it gets put is immaterial because no absolute pointers are stored only relative offsets, the notation used in the code "->" is the same, whether we're referring to a pointer or an offset, the language does the work.
We'd be able to save/load self referential data structures that can be loaded at any address and still work fine, that's quite a neat feature.
That's the kind of systems programming capability I'm talking about here.