Skip to content

Many Go programs crash at request time under p1-to-p2 adaptation #498

@erikrose

Description

@erikrose

We have observed this about Big Go services in production tests. Not all (Big) Go services crash, but most yield 500s.

Here are a few truths we know:

  • Big Go doesn't export a malloc() we can straightforwardly abuse as we do with TinyGo.
  • Big Go will not, in the forseeable future, support wasip2 directly, because of Google's lack of interest. Somebody may make a MediumGo that does and that doesn't make such space-constrained tradeoffs (lack of RTTI, etc.) as TinyGo does.
  • Big Go implements its own linker and does not use wasm-ld.
  • Big Go’s GC gets regularly rewritten, so poking its internals is frought. Similarly, glomming 2 Go programs together as in Remove restriction on .wasm extension #2 in Empty TinyGo project crashes under component adapter #491 (comment) is frought.
  • It looks like Big Go claims the whole heap, like TinyGo does. Not totally proven yet.

Ideas:

  • Maybe we can lie about the start of the heap, though, again, that's in a private Go-invented linker struct. Maybe it's stabler than GC free-ness data?
  • Maybe we can use multiple memories somehow. Look into why adapters currently have no memories of their own and understand if that's vital.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions