At this moment, the kernel used is a BSD kernel, but we are working now on making Go run on the bare hardware and on hypervisors. When that is done, the BSD kernels will be replaced with our own one.
So if that is enough to be a systems programming language, then C# is also one on account of the Singularity OS[2].
[1]: http://lsub.org/export/clivesys.pdf [2]: https://en.wikipedia.org/wiki/Singularity_(operating_system)
Both projects influenced the design of native .NET on Windows Phone 8, followed by .NET Native, IILC and CoreRT.
Also many of the C# extensions on Midori are being explored for C# 7 and future versions.
C# when compiled to native code is not much different than using Modula-3, in terms of available features. It just needs a little more fine tuning in terms of features.
I like performance in my systems programming languages and you won't get that if you can't control where your memory lives.
Many OSes like Oberon, Cedar, Topaz, SPIN among others were written in languages without direct support for it, so it is possible to write an OS without it.
The runtime package just needs to offer the services for it, just like many C functions are actually implemented in Assembly.
(Right now I think it is, but I know there's a Go issue dealing with a function like this, and one of the comments was about potentially creating `a` on the heap and returning an invisible pointer instead of the actual 1e9 bytes.)
func foo() (a [1e9]byte) { return a }Still, there are quite a few scenarios that could be served by such implementation, instead of being implemented in C or C++.
As I mentioned in another thread, any embedded board computer similar to a Raspberry PI could most likely be easily targeted by such cross-compiler.
People use the phrases without acknowledging or without realizing that there is a great breadth (and sometimes controversy) in what people take them to mean. I think you're doing it right defining it where you use it.
As always, a language and its implementations are not the same thing.
It is nothing special to have a bare runtime that would enable a Go application to be statically compiled and deployed into a Raspberry PI, for example.
It just needs someone to create such Go compiler.
Of course, such work would probably be a nice thesis project for OS design classes.
My understanding being that a systems programming language is one that can be used to bootstrap itself and build a full OS stack with the exception of some Assembly for interfacing with the underlying hardware.
As of Go 1.6, the language certainly fulfils this description.
If having a GC hinders certain use cases in systems programming, that is an orthogonal issue.
Edit: Looking forward to the day someone bothers to write an Oberon like OS in Go and HNers will keep on downvoting those that favour memory safe systems programming languages.