During my career, I’ve worked in various places. In light of this project, it’s maybe interesting how I got involved with DNS. During my last years at uni (‘round 2002), I need a project to graduate. I ended up in NLnet Labs (https://nlnetlabs.nl) to work on DNSSEC. Knowing only a few bits of DNS and nothing about DNSSEC, this was really exciting. Luckily this all worked out; I graduated and gained a lot of knowledge.
During my career, I dabbled in and out of the DNS space. I spend a few years working for Google as a site reliability engineer (SRE) in London and eventually circled back to the Netherlands, where I currently live.
Personally, I’ve always liked LEGO, and a few years back, I started building again. An excellent way to relax, not to sit behind a computer.
I’m currently employed as a contractor. I am currently (again) employed as an SRE (not at Google, though). This has mostly been the theme of my recent employments; make things more reliable. I can’t delve too deep here, but I was on-call and administrating Google Public DNS at my Google time. So if you happen to have used that some years back, it was me making it better and more reliable.
Go was just open-sourced (Nov 10, 2009), and I was looking for a new language to learn, and Go looked like a really fun one. I looked at how Go implemented interfacing with the DNS; this code looked beautiful to me, but it wasn’t publicly exposed and didn’t fully implement all things in the DNS.
So I forked the official Go DNS code and morphed it into what it is today - with many other folks during the years.
Basically wanted to learn Go, so I wrote a DNS library.
A DNS library in Go.
Have an easy but compelling way to interface with the DNS from Go.
Mostly time constraints. I don’t write a lot of code for this project anymore, so it’s mostly finding the time and energy to review PRs or respond to issues.
Keeping up with new things in the DNS specification can be challenging, but the project is fairly complete, so it’s reasonably quiet.
Following the IETF developments with the DNS standard. There is no grand vision, except we want to keep the API small and as fast as possible.
You need to use the Go tooling to interface with this project. It’s a library, so on its own, it doesn’t do much, go get github.com/miekg/dns
should be enough.
Yup. https://pkg.go.dev/github.com/miekg/dns
The ideal user has (some) understanding of the DNS and wants to use Go and this project to create something new.
Let’s encrypt, CoreDNS and Istio uses this project. Many other projects use miekg/dns as a building block. In fact, I would almost say that this is the go-to DNS package in the Go ecosystem.
It implements almost all DNS features that exist. Some new Resource Records are being defined, but those are relatively easy to add. When DNS gains QUIC support (this is now renamed to HTTP/3, so it’s a new transport for DNS), we probably need to add a few bits.
Connection pipe-lining and re-use is also something that I’m pondering to add at some point.