Go Linux

Open-source Go projects categorized as Linux

Top 23 Go Linux Projects

  • mkcert

    A simple zero-config tool to make locally trusted development certificates with any names you'd like.

    Project mention: You Can't Follow Me | news.ycombinator.com | 2024-01-11

    The author mentions difficulties with HTTPS and trying stuff locally.

    I've had some success with mkcert [1] to easily create certificates trusted by browsers, I can suggest to look into this. You are your own root CA, I think it can work without an internet connection.

    [1] https://github.com/FiloSottile/mkcert/

  • Wox

    A cross-platform launcher that simply works

    Project mention: Keypirinha: A fast launcher for keyboard ninjas on Windows | news.ycombinator.com | 2024-01-16

    I find Wox (which also uses Everything) a really great quick launcher, it saves a lot of time.

    https://github.com/Wox-launcher/Wox

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

  • Wails

    Create beautiful applications using Go

    Project mention: SGSG (Svelte + Go + SQLite + gRPC) - open source application | /r/sveltejs | 2023-12-06

    This is basically the same tech stack of an app I’ve been planning to build, but deployed as a desktop application using Wails: https://github.com/wailsapp/wails

  • podman

    Podman: A tool for managing OCI containers and pods.

    Project mention: A Journey to Find an Ultimate Development Environment | dev.to | 2024-02-02

    By using containerization, the application will always have the same configuration that is used in the development environment and production environment. There is no more "It works on my machine". Some examples of containerization technologies are Docker and Podman.

  • gvisor

    Application Kernel for Containers

    Project mention: Maestro: A Linux-compatible kernel in Rust | news.ycombinator.com | 2024-01-03

    Isn't gVisor kind of this as well?

    "gVisor is an application kernel for containers. It limits the host kernel surface accessible to the application while still giving the application access to all the features it expects. Unlike most kernels, gVisor does not assume or require a fixed set of physical resources; instead, it leverages existing host kernel functionality and runs as a normal process. In other words, gVisor implements Linux by way of Linux."

    https://github.com/google/gvisor

  • brook

    A cross-platform programmable network tool

    Project mention: How Brook bypass domain regardless of their IP | /r/u_txthinking | 2023-05-26

    Programming is very flexible, more can be found in documentation and other articles of this blog

  • duf

    Disk Usage/Free Utility - a better 'df' alternative

    Project mention: Go: What We Got Right, What We Got Wrong | news.ycombinator.com | 2024-01-04

    Not sure these are really popular, but I cannot resist advertising a few utilities written in Go that I regularly use in my daily workflow:

    - gdu: a NCDU clone, much faster on SSD mounts [1]

    - duf: a `df` clone with a nicer interface [2]

    - massren: a `vidir` clone (simpler to use but with fewer options) [3]

    - gotop: a `top` clone [4]

    - micro: a nice TUI editor [5]

    Building this kind of tools in Go makes sense, as the executables are statically compiled and are thus easy to install on remote servers.

    [1]: https://github.com/dundee/gdu

    [2]: https://github.com/muesli/duf

    [3]: https://github.com/laurent22/massren

    [4]: https://github.com/xxxserxxx/gotop

    [5]: https://github.com/zyedidia/micro

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

  • chezmoi

    Manage your dotfiles across multiple diverse machines, securely.

    Project mention: Ask HN: Did macOS Sonoma break your iCloud setup? | news.ycombinator.com | 2024-01-03

    > A warning, not an admonishment: Use Apple services in a novel or unsupported manner and you're asking for trouble.

    +1

    I've always had sync issues with iCloud Drive when storing developer projects and related things there. It ends up stuck or confused or conflicted but tries to resolve the merge conflicts opaquely and it's hard to know there's a problem in real time vs until later when you find something broken. I keep all dev things out of iCloud after getting burned by this enough times over the years.

    To OP: Consider a repo dotfiles setup like using Chezmoi or similar. Transitioning to it was less friction than I expected and the only downside really is having to remember to commit changes across devices.

    https://github.com/twpayne/chezmoi

  • vuls

    Agent-less vulnerability scanner for Linux, FreeBSD, Container, WordPress, Programming language libraries, Network devices

  • qt

    Qt binding for Go (Golang) with support for Windows / macOS / Linux / FreeBSD / Android / iOS / Sailfish OS / Raspberry Pi / AsteroidOS / Ubuntu Touch / JavaScript / WebAssembly

    Project mention: GoLang — Simplifying Complexity “The Beginning” | dev.to | 2023-05-27

    . Web backend (with various frameworks available) . Web Assembly (one of them is vugu framework) . Microservices (some frameworks: Go Micro, Go Kit, Gizmo, Kite) . Fragments services (Term mentioned by @jeffotoni in a microservices discussion group) . Lambdas (FaaS example) . Client Server . Terminal applications (using the tview lib) . IoT (some frameworks) . Bots (some here) . Client Applications using Web technology . Desktop using Qt+QML, Native Win Lib (example Qt, Qt widgets, Qml) . Network Applications . Protocol applications . REST Applications . SOAP Applications . GraphQL Applications . RPC Applications . TCP Applications . gRPC Applications . WebSocket Applications . GopherJS (compiles Go to JavaScript)

  • v2rayA

    A web GUI client of Project V which supports VMess, VLESS, SS, SSR, Trojan, Tuic and Juicity protocols. 🚀

  • NoiseTorch

    Real-time microphone noise suppression on Linux.

    Project mention: Ask HN: What are some unpopular technologies you wish people knew more about? | news.ycombinator.com | 2023-12-02

    Noisetorch. https://github.com/noisetorch/NoiseTorch

  • up

    Ultimate Plumber is a tool for writing Linux pipes with instant live preview (by akavel)

    Project mention: Fx – Terminal JSON Viewer | news.ycombinator.com | 2023-09-19

    This fx rewrite is very exciting. I'll have to try it. I thought of fx as a wrapper around jq, that allowed quick iteration over building jq scripts. Sort of an Ultimate Plumber [1] but only for jq. It looks like it is now more like a JavaScript processor plus an interactive viewer.

    Someone mention Visidata[2]? VisiData is also a TUI that is great on tabular data, and it can work with json. If your JSON is mostly tabular in nature, Visidata does a great job at showing that data and allowing you to explore it. A lot of json I deal with is tabular-like data. There is a great tutorial [3], that can help you get your bearings with Visidata. Once you understand those basics you might want to look at this thread [4] for what commands you can use with json.

    [1] Ultimate Plumber: https://github.com/akavel/up

  • linuxkit

    A toolkit for building secure, portable and lean operating systems for containers

    Project mention: Gokrazy – Go Appliances | news.ycombinator.com | 2023-12-18

    Another project that aims to deliver this is Linuxkit (https://github.com/linuxkit/linuxkit). All the components they ship are written in memory safe languages (usually Go) and run as containers under containerd. You can build a custom image very easily, fully defined as a YAML file.

  • crowdsec

    CrowdSec - the open-source and participative security solution offering crowdsourced protection against malicious IPs and access to the most advanced real-world CTI.

    Project mention: Disable notifications for one out of several machines | /r/CrowdSec | 2023-07-04
  • go-flutter

    Flutter on Windows, MacOS and Linux - based on Flutter Embedding, Go and GLFW.

  • scc

    Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go

    Project mention: Essential Command Line Tools for Developers | dev.to | 2024-01-15

    View on GitHub

  • ebpf

    ebpf-go is a pure-Go library to read, modify and load eBPF programs and attach them to various hooks in the Linux kernel.

    Project mention: eBPF Verification Is Untenable | news.ycombinator.com | 2023-06-22

    The whole BPF verifier and development process is so botched, it's ridiculous. It's like maintainers decided to make this as hard as possible out of pettiness and "they have to use C APIs instead" or something.

    - Loading an eBPF module without the CAP_BPF (and in some cases without the CAP_NET_ADMIN which you need for XDP) capabilities will generate a "unknown/invalid memory access" error which is super useless as an error message.

    - In my personal opinion a bytecode format for both little endian (bpfel) and big endian (bpfeb) machines is kinda unnecessary. I mean, it's a virtual bytecode format for a reason, right!?

    - Compiling eBPF via clang to the bpf bytecode format without debug symbols will make every following error message down the line utterly useless. Took me a while to figure out what "unknown scalar" really means. If you forget that "-g" flag you're totally fucked.

    - Anything pointer related that eBPF verifier itself doesn't support will lead to "unknown scalar" errors which are actually out of bounds errors most of the time (e.g. have to use if pointer < size(packet) around it), which only happen in the verification process and can only be shown using the bpftool. If you miss them, good luck getting a better error message out of the kernel while loading the module.

    - The bpftool maintainer is kind of unfriendly, he's telling you to read a book about the bytecode format if your code doesn't compile and you're asking about examples on how to use pointers inside a BPF codebase because it seems to enforce specific rules in terms of what kind of method (__always_static) are allowed to modify or allocate memory. There's a lot of limitations that are documented _nowhere_ on the internet, and seemingly all developers are supposed to know them by reading the bpftool codebase itself!? Who's the audience for using the bpftool then? Developers of the bpftool itself?

    - The BCC tools (bpf compiler collection) are still using examples that can't compile on an up-to-date kernel. [1] If you don't have the old headers, you'll find a lot of issues that show you the specific git hash where the "bpf-helpers.h" file was still inside the kernel codebase.

    - The libbpf repo contain also examples that won't compile. Especially the xdp related ones [2]

    - There's also an ongoing migration of all projects (?) to xdp-tools, which seems to be redundant in terms of bpf related topics, but also has only a couple examples that somehow work [3]

    - Literally the only userspace eBPF generation framework that worked outside a super outdated enterprise linux environment is the cilium ebpf project [4], but only because they're using the old "bpf-helpers.h" file that are meanwhile removed from the kernel itself. [5] They're also incomplete for things like the new "__u128" and "__bpf_helper_methods" syntax which are sometimes missing.

    - The only working examples that can also be used for reference on "what's available" in terms of eBPF and kernel userspace APIs is a forked repo of the bootlin project [6] which literally taught me how to use eBPF in practice.

    - All other (official?) examples show you how to make a bpf_printk call, but _none_ of them show you how to even interact with bpf maps (whose syntax changed like 5 times over the course of the last years, and 4 of them don't run through the verifier, obviously). They're also somewhat documented in the wiki of the libbpf project, without further explanation on why or what [7]. Without that bootlin repo I still would have no idea other than how to make a print inside a "kretprobe". Anything more advanced is totally undocumented.

    - OpenSnitch even has a workflow that copies their own codebase inside the kernel codebase, just to make it compile - because all other ways are too redundant or too broken. Not kidding you. [8]

    Note that none of any BPF related projects uses any kind of reliable version scheme, and none of those project uses anything "modern" like conan (or whatever) as a package manager. Because that would have been too easy to use, and too easy on documenting on what breaks when. /s

    Overall I have to say, BPF was the worst development experience I ever had. Writing a kernel module is _easier_ than writing a BPF module, because then you have at least reliable tooling. In the BPF world, anything will and can break at any unpredictable moment. If you compare that to the experience of other development environments like say, JVM or even the JS world, where debuggers that interact with JIT compilers are the norm, well ... then you've successfully been transferred back to the PTSD moments of the 90s.

    Honestly I don't know how people can use BPF and say "yeah this has been a great experience and I love it" and not realize how broken the tooling is on every damn level.

    I totally recommend reading the book [9] and watching the YouTube videos of Liz Rice [10]. They're awesome, and they show you how to tackle some of the problems I mentioned. I think that without her work, BPF would have had zero chance of success.

    What's missing in the BPF world is definitely better tooling, better error messages (e.g. "did you forget to do this?" or even "unexpected statement" would be sooooo much better than the current state), and an easier way to debug an eBPF program. Documentation on what's available and what is not is also necessary, because it's impossible to find out right now. If I am not allowed to use pointers or whatever, then say so in the beginning.

    [1] https://github.com/iovisor/bcc

    [2] https://github.com/libbpf/libbpf

    [3] https://github.com/xdp-project/xdp-tools

    [4] https://github.com/cilium/ebpf/

    [5] https://github.com/cilium/ebpf/tree/master/examples/headers

    [6] https://elixir.bootlin.com/linux/latest/source/tools/testing...

    [7] https://github.com/libbpf/libbpf/wiki/Libbpf-1.0-migration-g...

    [8] https://github.com/evilsocket/opensnitch/blob/master/ebpf_pr...

    [9] https://isovalent.com/learning-ebpf/

    [10] (e.g.) https://www.youtube.com/watch?v=L3_AOFSNKK8

  • goss

    Quick and Easy server testing/validation

    Project mention: Tools for validating K8s features | /r/kubernetes | 2023-06-08

    Certain checks may be possible with goss and the kgoss wrapper: https://github.com/goss-org/goss/tree/master/extras/kgoss

  • bombardier

    Fast cross-platform HTTP benchmarking tool written in Go

    Project mention: Discussion: Are we entering the golden age of hacking, where software written by language models that "looks correct" to the lazy human operator is used despite being full of vulnerabilities? | /r/hacking | 2023-03-22

    Why? There is a ready script for that https://github.com/codesenberg/bombardier

  • syzkaller

    syzkaller is an unsupervised coverage-guided kernel fuzzer

    Project mention: Automated Unit Test Improvement Using Large Language Models at Meta | news.ycombinator.com | 2024-02-17

    https://arxiv.org/abs/2402.09171 :

    > This paper describes Meta's TestGen-LLM tool, which uses LLMs to automatically improve existing human-written tests. TestGen-LLM verifies that its generated test classes successfully clear a set of filters that assure measurable improvement over the original test suite, thereby eliminating problems due to LLM hallucination. [...] We believe this is the first report on industrial scale deployment of LLM-generated code backed by such assurances of code improvement.

    Coverage-guided unit test improvement might [with LLMs] be efficient too.

    https://github.com/topics/coverage-guided-fuzzing :

    - e.g. Google/syzkaller is a coverage-guided syscall fuzzer: https://github.com/google/syzkaller

    - Gitlab CI supports coverage-guided fuzzing: https://docs.gitlab.com/ee/user/application_security/coverag...

    - oss-fuzz, osv

    Additional ways to improve tests:

    Hypothesis and pynguin generate tests from type annotations.

    There are various tools to generate type annotations for Python code;

    > pytype (Google) [1], PyAnnotate (Dropbox) [2], and MonkeyType (Instagram) [3] all do dynamic / runtime PEP-484 type annotation type inference [4] to generate type annotations. https://news.ycombinator.com/item?id=39139198

    icontract-hypothesis generates tests from icontract DbC Design by Contract type, value, and invariance constraints specified as precondition and postcondition @decorators:

  • talos

    Talos Linux is a modern Linux distribution built for Kubernetes.

    Project mention: There are only 12 binaries in Talos Linux | news.ycombinator.com | 2024-03-04

    Super cool. I always enjoy reading about systems that challenge, well, "ossified" assumptions. An OS not providing a shell, for example? Madness! ... or is it genius, if the OS has a specific purpose...? It's thought-provoking, if nothing else.

    I'm a bit skeptical of parts. For instance, the "init" binary being less than 400 lines of golang - wow! And sure, main.go [1] is less than 400 lines and very readable. Then you squint at the list of imported packages, or look to the left at the directory list and realize main.go isn't nearly the entire init binary.

    That `talosctl list` invocation [2] didn't escape my notice either. Sure, the base OS may have only a handful of binaries - how many of those traditional utilities have been stuffed into the API server? Not that I disagree with the approach! I think every company eventually replaces direct shell access with a daemon like this. It's just that "binary footprint" can get a bit funny if you have a really sophisticated API server sitting somewhere.

    [1]: https://github.com/siderolabs/talos/blob/main/internal/app/m...

    [2]: https://www.talos.dev/v1.6/reference/cli/#talosctl-list

  • pet

    Simple command-line snippet manager

    Project mention: What's a really niche tool you use that you can't live without? | /r/DataHoarder | 2023-05-09

    pet

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

NOTE: The open source projects on this list are ordered by number of github stars. The number of mentions indicates repo mentiontions in the last 12 Months or since we started tracking (Dec 2020). The latest post mention was on 2024-03-04.

Go Linux related posts

Index

What are some of the best open-source Linux projects in Go? This list will help you:

Project Stars
1 mkcert 44,834
2 Wox 23,793
3 Wails 21,302
4 podman 21,067
5 gvisor 14,672
6 brook 14,171
7 duf 12,098
8 chezmoi 11,171
9 vuls 10,586
10 qt 10,159
11 v2rayA 8,933
12 NoiseTorch 8,803
13 up 8,088
14 linuxkit 8,083
15 crowdsec 7,578
16 go-flutter 5,777
17 scc 5,739
18 ebpf 5,571
19 goss 5,401
20 bombardier 5,126
21 syzkaller 5,046
22 talos 4,936
23 pet 4,149
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com