gnolang / gno

Gno: An interpreted, stack-based Go virtual machine to build succinct and composable apps + Gno.land: a blockchain for timeless code and fair open-source
https://gno.land/
Other
842 stars 343 forks source link

Repo structure and binaries' improvements #1201

Open moul opened 9 months ago

moul commented 9 months ago

Please note that the comments should be read. The body of this issue is not yet updated with the latest decisions.

This issue seeks to clarify concepts and suggest future updates, related to #1105, where I proposed a gnosdk space.

The gno.land/cmd/gno and gnosdk should focus on user experience, while the rest of gno.land, gnosdk, and tm2 should showcase standalone binaries and minimalist libraries.

The main binary, gno.land/cmd/gno, should be the developers' go-to binary in the ecosystem, catering to both developers and non-developers. Considering gno.land's significant role with github-style realms, IBC, and ICS features, it's fitting to house the ecosystem binary, gno.land/cmd/gno, here, even if it extends beyond gno.land.

gnoland, designed for production runtime management and daemon operation, should remain minimalist, focusing on node initiation and network joining, leaving extensive configuration and management tools to gnosdk or gno under a node/genesis subcommand.

The fooland binary, aligning with other cosmos chains, serves as a central hub, combining standalone libraries/binaries into one. Once established, the secondary binary, "gno," becomes necessary, allowing "fooland" to focus on unique features and enabling gnolang developers to use standard ecosystem tools.

I support including basic account management and client functionality in the gno binary, reducing the need for gnokey, except for demonstrating a minimal client for a new chain.

Proposal for structural target:

In bold, the things that are not existing yet.

moul commented 8 months ago

Based on today's discussion, I have officially relocated the main binary, gno, to gno.land/. This move positions it as the ecosystem's primary binary.

Additionally, I have introduced a new binary called gnolang. Similar to gnokey, it is a minimal composable binary along with its library. This allows for the composition of binaries for various purposes. Importantly, it enables us to maintain the independence and testability of gnovm without any external dependencies.

To clarify, while I personally prefer using only the gno binary, we can propose a way for forkers and builders to quickly get started with the gnolang binary. Meanwhile, we can continue developing integration tests and other components in gnovm/ that are separate from the rest of the project.

Edit: bonus, what do you think about keeping the structure mentioned above, but also.... create a top-level main.go file to install the gno binary with go install github.com/gnolang/gno?

thehowl commented 8 months ago

Edit: bonus, what do you think about keeping the structure mentioned above, but also.... create a top-level main.go file to install the gno binary with go install github.com/gnolang/gno?

I like this!


The OP also looks good to me. A few further proposals/q's:

jaekwon commented 8 months ago

GNO:

GNOLAND:

GNOKEY:

And I would suggest renaming GNOSDK to GNOLANDTOOLS, for any chain based on the GNO VM.

thehowl commented 8 months ago

@jaekwon

jaekwon commented 8 months ago
moul commented 8 months ago

I'm not sure if I remember everything we discussed during the call, but here are the key points:


Edit: If it's not gnosdk/ and since I don't like gnolandtools, what are your thoughts on using github.com/gnolang/tools/gno{,land}-xxx instead? In this case, xxx represents a folder that contains a specific tool, such as tools/gno-mod, tools/gno-dev, tools/gno-publish, and tools/gnoland-monitoring.

moul commented 8 months ago

See #1256

thehowl commented 8 months ago

So:

Is this roughly our current position? @moul

I think we should have only one of misc or contrib.

moul commented 7 months ago

Is this roughly our current position? @moul

Yeah, that’s the idea.

For the Git method, let's hold off and have users specifically use "gnodev" rather than "gno dev." We might consider enabling "gno$command" execution later on.

I think we should have only one of misc or contrib.

I favor flagging 'contribs/gno*/' directories for binaries, similar to '/usr/local/bin', and using 'misc' for everything else, possibly with subdirectories, akin to '/opt' — assuming I've got the Unix standard folders right.

thehowl commented 7 months ago

Added to the Rouen Retreat board. I think a greater discussion on the strategy and writing out a document on what we want for binary/repo structure might be good :)