// Ok, so the main crate needs to expose the app "interface". Then
// eventually there needs to a web2 version that you patch. The
// web2 version has the same app "interface", but it uses wit
// bindings so that the app can be compiled as a wasm component
// instead of a native app.
// For native apps, you will include the app as a dependency and
// define the app in the app crate, but the main crate will be
// what is actually compiled to an executable. The reason for this
// is hot reloading in development. Because when building for
// release you can simply just use the app crate directly, but
// in development you use it indirectly via the libapp.so file.