The ultimate goal is to make Go, the branded modern C, become the actual modern C, featuring great usability and platform native support.
We are well aware it is an ambitious project regarding to our small scale, and it takes time and effort in order to make it actually happen, currently we are working on following tasks:
- Encourage Go developers to build more allocation-free modules.
NOTE At this stage, we will prioritize the
js/wasm
support.
- Be compatible with go1.21 toolchain.
- Better structuring of the std.
- Expose all low-level & reusable bits of the runtime.
- Provide apis for custom memory allocator.
- Stacktrace.
- Stack growth.
- Copy stack.
- Debugging with
delve
. - Program startup
-
js/wasm
-
wasip1/wasm
-
linux/{arm64, amd64}
-
android/{arm64, amd64}
-
darwin/{arm64, amd64}
-
ios/arm64
-
windows/{arm64, amd64}
-
- FFI support (call and callback)
-
js
-
wasm/wasi
-
syscall/linux
-
vdso
-
C
-
aapcs64
-
sysv{32, 64}
-
fastcall
-
stdcall
-
win64
-
-
objc
(based onC
) -
jni
(based onC
)
-
- Platform SDK (
pcz codegen
)-
DOM
apis (code generation with WebIDL)- Support converting WebIDL to YAML spec in
h2y
. - Support Go package generation for WebIDL in
ffigen
. - Use browser-compat-data for comments.
- Support converting WebIDL to YAML spec in
-
WebExtension
apis (Manifest Version 3).- Normalize chromium web extension idls & json.
- Resolve package conflicts among namespaces.
-
nodejs
apis. -
android
NDK- Add C header file support in
h2y
- Support Go package generation for C in
ffigen
.
- Add C header file support in
-
darwin
XCode (*.sdk/*.framework
)- Add Objective-C header file support in
h2y
- Support Go package generation for Objective-C in
ffigen
.
- Add Objective-C header file support in
-
win32
Windows SDK (see tasks forandroid
NDK)
-
NOTE A lot of design decisions to be made in the stage 1 tasks require taking stage 2 tasks into consideration, we won't create any barrier for any disscussions under any circumstances, stay ontopic and you are always welcome.
- Define apis for building custom
goroutine
support. - Port Sched program from the official Go std for
goroutine
.- Generalize and expose
internal/poll
.
- Generalize and expose
- Port GC program from the official Go std to work with custom allocators.
- Runtime feature support.
-
race
-
asan
-
msan
-
pprof
-
fuzz
-
- GPU support
-
vulkan
-
directx
-
metal
-
- Wrap native GUI widgets exposed by platform apis.
- Constraint layout for native GUI widgets.
-
opentype
font support.
TBD.
- Support static binary build when working with
C
(go build -buildmode=static
)- Implement a
pcz
subcommand to support go external linking mode.
- Implement a
- Standardize linker scripts in YAML (in our opinion, they resembles a lot)
- Implement tool (
l2y
) to convert existing linker scripts to YAML. - Implement support for linking custom sections in
pcz
.
- Implement tool (
- Support
unsafe.SelectABI
for foreign ABIs in go compiler (inspired by golang/go#44065). - A libc implemented in Go.
- A configurable run-time linker (
ldso
).- Define platform agnostic standard for thread-local storage relocation.
- Add missing privileged instructions to
$GOROOT/src/cmd/asm
. - UEFI libraries in Go
- OS Loader
- Drivers
- Unikernel library (Inspired by eliasnaur/unik).
TBD.