containers / bootc

Boot and upgrade via container images
https://containers.github.io/bootc/
Apache License 2.0
581 stars 72 forks source link

remoting API #522

Open hexfusion opened 4 months ago

hexfusion commented 4 months ago

As the popularity of bootc grows a central location for go types/examples would be useful for projects. Speaking with @cgwalters he is willing to consider something similar to rpmostree-client-go[1] for bootc but there is some intersection with [2].

Curious if instead of creating go client as a os exec wrapper, exposing some of the Rust functionality via CGO? Please include me in future conversations on the topic if possible :pray: Wasmtime CGO examples as ref. [3],[4]. I understand that CGO is not ideal but in terms of interaction with Rust over FFI, I don't believe there is another option.

[1] https://github.com/coreos/rpmostree-client-go/ [2] https://github.com/containers/bootc/issues/518 [3] https://github.com/bytecodealliance/wasmtime/blob/b869b66bce8a57c9e83db4e3bcd6809d88e94a5f/crates/c-api/src/types/extern.rs#L39 [4] https://github.com/bytecodealliance/wasmtime-go/blob/cabc733f95623fb897b2c35266124192ffca94b4/externtype.go#L9C12-L9C29

cgwalters commented 4 months ago

Curious if instead of creating go client as a os exec wrapper, exposing some of the Rust functionality via CGO

My experience with CGO has not been great. We don't have strong high performance needs here right? An IPC framework of any form is almost certainly going to be dramatically safer and easier to maintain.

I would start with a simple "stable CLI with --json output" as the lowest common denominator to start, which is almost what we have - we just need to stabilize the CLI and json schema.

But, if we needed to go to IPC, my preferences would be one of:

cgwalters commented 4 months ago

This issue also intersects with https://github.com/containers/bootc/issues/2