Is Go Used in Production more than Rust ?
Tags: go, rust
Published: 2024-04-26 08:37:16

I was wondering if programs used in the real world are mostly written/built in Rust or Go? How to create a real world statistic to compare ?

## Homebrew package manager

I found that Homebrew lists the dependencies of the package like this.

```sh
$ brew info eza
==> eza: stable 0.18.13 (bottled)
Modern, maintained replacement for ls
https://github.com/eza-community/eza
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/e/eza.rb
License: MIT
==> Dependencies
Build: pandoc ✘, pkg-config ✔, rust ✘
Required: libgit2 ✘
==> Analytics
install: 12,792 (30 days), 38,295 (90 days), 68,375 (365 days)
install-on-request: 12,790 (30 days), 38,293 (90 days), 68,375 (365 days)
build-error: 0 (30 days)
```

The dependencies of eza to build are pandoc, pkg-config and Rust. So, I can get all software packages in Homebrew and query every package to get its dependencies, then calculate the number of packages which depends on Go and others on Rust.

I was wondering if I should execute system commands of `brew list` and `brew info <pkg-name>`, but fortunately, Homebrew has a [json file](https://formulae.brew.sh/api/formula.json) containing all Homebrew Core Formulae.

## gobrew

So, I created a [simple Go program named it "gobrew"](https://github.com/abanoubha/gobrew) to get the JSON API, then parse it, and count all Go-based software packages.

I made **gobrew** more general, so, you can use it to get the number of packages written in Ruby by this command `gobrew -l ruby`. You can specify any programming language or library or build system or runtime.

## Statistics on April 26, 2024

The number of packages written in **Go** is **957**. The number of packages written in **Rust** is **524**. That means Go is the most used in software distributed by Homebrew package manager for production by far.

```sh
$ ./gobrew -l go
957

$ ./gobrew -l rust
524
```

You can try it yourself via [gobrew on GitHub](https://github.com/abanoubha/gobrew).

Here is a chart to help distinguish the difference in the count of packages.

![# of Homebrew Core formulae written in Go vs Rust](https://abanoubhanna.com/img/homebrew-core-formula-go-rust.svg "# of Homebrew Core formulae written in Go vs Rust")

## other programming languages

I used this command to count packages written in these programming languages for me.

```sh
$ ./gobrew -l zig
6
```

Here is a table of programming languages (I thought of) and their packages count.

| Language    | pkg count |
|:------------|:----------|
| python\@3.12 | 718       |
| python\@3.11 | 67        |
| lua         | 47        |
| ruby        | 27        |
| ocaml       | 26        |
| perl        | 25        |
| php         | 20        |
| cython      | 12        |
| Zig         | 6         |

## build systems & libraries & runtimes

I used the following command to count packages which use the build system or runtime to get build or run.

```sh
$ ./gobrew -l cmake
1011
```

Here is a table of build systems, libraries and runtimes (I thought of) and their packages count.

| build system or runtime | pkg count |
|:------------------------|:----------|
| pkg-config              | 1447      |
| cmake                   | 1011      |
| autoconf                | 455       |
| automake                | 435       |
| libtool                 | 366       |
| ninja                   | 253       |
| meson                   | 213       |
| node                    | 189       |
| gcc                     | 75        |
| python-setuptools       | 75        |
| llvm                    | 30        |
| luajit                  | 22        |

## my opinion

I think of Rust as a great language for low level programming such as operating system modules and device drivers. And I think of Go as the perfect backend programming language and CLI apps. I think that's why Go is almost 2x more used to create apps distributed via Homebrew compared to Rust.

I think Go is more useful for most cases, but there are other specific cases suitable more for Rust and Zig (which I think [will succeed and get popular](https://abanoubhanna.com/posts/zig-will-succeed/)).

I hope you enjoyed reading this post as much as I enjoyed writing it. If you know a person who can benefit from this information, send them a link of this post. If you want to get notified about new posts, follow me on [YouTube](https://www.youtube.com/@LetsFixThatError?sub_confirmation=1), [Twitter (x)](https://x.com/abanoubha), [LinkedIn](https://linkedin.com/in/abanoub-hanna/), [Facebook](https://www.facebook.com/EgyptianCodingGeeks), [Telegram](https://t.me/EgyptianCodingGeeks) and [GitHub](https://github.com/abanoubha).