little note for programing language fanatics

if your language has a centralised package repository

go fuck yourself

ie:

python

rust

javascript

if your language has a decentralised package management system, you are ok

c

c++

go

i don't even know how java imports work, i suspect they are decentralized, probably also C# and haskell and lisp and kotlin... again, no idea about any of these things, please do jump in and defend your language nostr:npub19mun7qwdyjf7qs3456u8kyxncjn5u2n7klpu4utgy68k4aenzj6synjnft

Reply to this note

Please Login to reply.

Discussion

bob likes #clojure i believe, which is a functional language that compiles to JVM

c# uses nuget if you want, but easily integrates source and directly assembly "linking" if you want. Nuget uses the nuget API but easily accepts "sources" as feed urls. The API is public but not well defined, however they are plenty of feed hosting tools. I use Sleet and an http server to host mine. I did write my own search serve though.

The build system for C# (.NET anyway used synonymously but technically completely idependent) is MSBuild which doesn't care where the libraries come from as long as your project points to a place it can find and link them.

a lot of microsoft side projects were not terrible, and p2p was popular in amongst it all, maybe the only virtue of microsoft

C# at least was outside of Microsoft, and I think the Rosolyn C# compiler is still maintained outside Microsoft by the original developer. He may be on MS payroll, but I think its still independent. MISL and .NET on the otherhand, FOSS at least, but yeah captured by MS.

For java, The Maven Central Repository is the de facto centralized repository. But it is not official. For C and C++, is there any package management system at all?

there isn't! git, at best! that's why submodules

and i think you can still build Go apps without modules enabled if you pull all the deps into a gopath

but go is at least decentralized in this area, as well as relatively intelligent and they provide a cache that means that once one person pulls a url/version tag everyone can use it even if the thing goes offline, which is like the actual benefit of the central system, flipped on its head

so, yeah, hah... ok fuck java then too, i'm putting it in the list of evils

ChatGPT on this:

Let's compare Haskell, Rust, and Go in terms of their package management systems to understand the distinctions and why the post categorizes Rust as 'centralized' and Go as 'decentralized.'

### Haskell

- **Central Repository**: Hackage

- Centralized repository for Haskell libraries.

- **Package Management Tools**: Cabal and Stack

- Both tools support decentralized fetching of dependencies (e.g., from version control repositories or local paths).

- Stackage (used by Stack) is a curated set of packages from Hackage, ensuring compatibility but still centralized in nature.

- **Decentralization**: While primarily relying on Hackage, Haskell allows alternative sources for dependencies, providing a mix of centralized and decentralized features.

### Rust

- **Central Repository**: crates.io

- Centralized repository for Rust packages.

- **Package Management Tool**: Cargo

- By default, Cargo fetches dependencies from crates.io, reinforcing centralization.

- Cargo supports fetching dependencies from Git repositories and local paths, similar to Haskell's decentralized features.

- **Decentralization**: Despite Cargo's ability to use alternative sources, the ecosystem heavily relies on crates.io, thus perceived as more centralized.

### Go

- **Default Proxy**: proxy.golang.org (since Go 1.13)

- Acts as a centralized cache and improves reliability and performance.

- **Package Management**: Go Modules

- Go modules can fetch dependencies directly from their source repositories (e.g., GitHub, Bitbucket).

- Custom proxies can be configured using the `GOPROXY` environment variable.

- **Sum Database**: sum.golang.org ensures the integrity of downloaded modules.

- **Decentralization**: Go's ecosystem encourages fetching dependencies directly from the original repositories, promoting a decentralized approach by design.

### Key Differences

1. **Default Behavior**:

- **Rust**: Cargo defaults to crates.io, making the central repository the primary source of packages.

- **Haskell**: While Cabal and Stack default to Hackage and Stackage, they support other sources without significant configuration.

- **Go**: Despite the existence of `proxy.golang.org`, Go Modules default to fetching from the source repositories, highlighting a decentralized approach.

2. **Community and Ecosystem Practices**:

- **Rust**: The community heavily relies on crates.io, reinforcing the centralization despite Cargo's decentralized capabilities.

- **Haskell**: The community uses Hackage extensively, but decentralized practices are more common due to the flexibility provided by Cabal and Stack.

- **Go**: The Go community frequently fetches dependencies directly from version control systems, embracing decentralization as the norm.

### Why Rust is Seen as Centralized and Go as Decentralized

- **Rust**: The heavy reliance on crates.io as the primary source for packages creates a perception of centralization, even though Cargo can handle decentralized sources.

- **Go**: The design of Go Modules and the common practice of fetching dependencies directly from their repositories align with decentralized principles. The use of `proxy.golang.org` is optional and can be bypassed easily.

In summary, while Haskell, Rust, and Go all support decentralized package management to some extent, the difference lies in their default behaviors and community practices. Rust's ecosystem's reliance on crates.io contrasts with Go's more inherently decentralized approach to fetching dependencies, explaining the categorizations in the post.

see, go is far more decentralized

Yep, apparently, but Haskell and Rust can at least adapt.

You can easily fetch rust crates from a different registry or self host your own one?

https://doc.rust-lang.org/cargo/reference/registries.html

so, going out of my way to use it not as it is default configured, for a language that takes ridiculously long to compile things, has an ugly syntax and uses OOP and kooky "lifecycle" notations that are more retarded than "variable not used" errors by 1000x

not only that, a language that is dearly loved by shitcoiners and fake privacy defenders like Mozilla with their non-disableable DRM enable nag