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/wasmsupport.
- 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)-
DOMapis (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
-
WebExtensionapis (Manifest Version 3).- Normalize chromium web extension idls & json.
- Resolve package conflicts among namespaces.
-
nodejsapis. -
androidNDK- Add C header file support in
h2y - Support Go package generation for C in
ffigen.
- Add C header file support in
-
darwinXCode (*.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
-
win32Windows SDK (see tasks forandroidNDK)
-
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
goroutinesupport. - 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.
-
opentypefont support.
TBD.
- Support static binary build when working with
C(go build -buildmode=static)- Implement a
pczsubcommand 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.SelectABIfor 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.