Matt Oswalthttps://oswalt.dev/Recent content on Matt OswaltHugo -- gohugo.ioenCopyright (c) 2023 Matt OswaltThu, 07 Sep 2023 16:33:54 +0200Copy and Clone in Rusthttps://oswalt.dev/2023/12/copy-and-clone-in-rust/Thu, 28 Dec 2023 10:00:00 +0000https://oswalt.dev/2023/12/copy-and-clone-in-rust/<p>Rust’s <a href="https://doc.rust-lang.org/std/marker/trait.Copy.html"><code>Copy</code> trait</a> is one of the earliest things I struggled with when I started learning the language. On its surface, this trait is quite simple, but its implications on how an implementing type can interact with Rust’s ownership model are significant. As I gained more experience, I also encountered the <a href="https://doc.rust-lang.org/std/clone/trait.Clone.html"><code>Clone</code></a> trait frequently as well, and like many others, found it difficult to remember the differences between the two, especially early on. Both are just two of several examples of how Rust is much more explicit about these kinds of things, especially when compared to the languages I’ve historically used.</p>Network Programmability and Automation: Second Editionhttps://oswalt.dev/2022/07/network-programmability-and-automation-second-edition/Fri, 08 Jul 2022 10:00:00 +0000https://oswalt.dev/2022/07/network-programmability-and-automation-second-edition/<p>Nearly seven years ago, <a href="https://oswalt.dev/2015/12/training-the-next-generation-network-engineer/">I wrote a blog post</a> announcing an exciting new project: a new O’Reilly book titled “Network Programmability and Automation”. Of course, I was absolutely thrilled to work on this project with my co-authors Jason Edelman and Scott Lowe, but I was also eager to be able to make this kind of impact on what was still at the time, a very nascent network automation discipline in the industry.</p>Non-Local Address Binds in Linuxhttps://oswalt.dev/2022/02/non-local-address-binds-in-linux/Thu, 24 Feb 2022 00:00:00 +0000https://oswalt.dev/2022/02/non-local-address-binds-in-linux/<p>I came across some interesting sockets-related behavior this week that caused me to go down a bit of a rabbit hole. This ended up taking me on a tour of Linux’s socket and IPv4/IPv6 implementation. I thought the journey was instructive, and I hope that my attempt to recount the steps I went through is useful to you.</p>Shifting Gearshttps://oswalt.dev/2022/01/shifting-gears/Mon, 10 Jan 2022 00:00:00 +0000https://oswalt.dev/2022/01/shifting-gears/<p>My career path has been anything but linear. I’ve tried a little bit of everything - in fact, the last few years of my career were aimed at accomplishing just that. It’s all been consistently technical, but this manifested in a wide range of different roles, ranging from operations to product. But now it’s time for a new challenge, and a more deliberate focus on becoming a better engineer.</p>The Evolving eBPF Toolchainhttps://oswalt.dev/2021/07/the-evolving-ebpf-toolchain/Thu, 01 Jul 2021 00:00:00 +0000https://oswalt.dev/2021/07/the-evolving-ebpf-toolchain/<p>These days there is an ever-growing list of tools and frameworks for working with eBPF, all at varying levels of abstraction. There does seem to be <a href="https://ebpf.io/what-is-ebpf/#development-toolchains">a few that sit at the core</a> of the rest of the eBPF ecosystem. However, the ecosystem is changing rapidly, and I’ve found it to be a bit difficult to navigate through the sea of information that’s out there and understand which tools are the current “standard” for each use case, and which are being deprecated/changed. If you’re not totally plugged in to the linux kernel community, it may not be obvious where to start.</p>Polymorphism in Rusthttps://oswalt.dev/2021/06/polymorphism-in-rust/Tue, 22 Jun 2021 00:00:00 +0000https://oswalt.dev/2021/06/polymorphism-in-rust/<p>In the <a href="https://oswalt.dev/2021/06/using-generic-types-in-rust/">previous post</a> we explored the use of generic types in Rust and some of the common reasons for doing so. In this post, I’d like to take a step back and look at the full spectrum of options Rust makes available for accomplishing polymorphism, and get under the covers so we fully understand the tradeoffs of the decisions we make as Rust developers.</p>Using Generic Types in Rusthttps://oswalt.dev/2021/06/using-generic-types-in-rust/Tue, 15 Jun 2021 00:00:00 +0000https://oswalt.dev/2021/06/using-generic-types-in-rust/<p><a href="https://oswalt.dev/2020/08/what-is-generic-programming/">In a prior post</a>, I explored “generic programming” with the aim of highlighting the language-agnostic benefits and core concepts. Especially if this is a new topic for you, I encourage you to read this post first, as there are a lot of ideas covered there that apply much more broadly than what we’ll get to in this post, which instead will focus on how Rust does things.</p>Introduction to eBPFhttps://oswalt.dev/2021/01/introduction-to-ebpf/Tue, 19 Jan 2021 00:00:00 +0000https://oswalt.dev/2021/01/introduction-to-ebpf/<p>If you’re paying much attention at all to the systems or cloud-native communities, you have <strong>certainly</strong> heard about eBPF. It has dominated several conference schedules for the last few years, and it even has <a href="https://ebpf.io/summit-2020/">its own conference</a> now! However, unlike a lot of hyped-up technology buzzwords, this one’s momentum doesn’t seem to be unwarranted, or even ahead of the curve:</p>What Are Data Types Anyways?https://oswalt.dev/2020/11/what-are-data-types-anyways/Thu, 19 Nov 2020 00:00:00 +0000https://oswalt.dev/2020/11/what-are-data-types-anyways/<p>There are actually quite a few resources out there for a novice programmer to learn about data types like strings, integers, floats, and more. The <a href="https://en.wikipedia.org/wiki/Data_type">wikipedia page</a>, as an example, covers a broad spectrum of potential meanings. Just about any book or tutorial focused on a particular programming language will start off by listing the types supported by that language. This makes sense, since they are the fundamental building block of being able to do pretty much <strong>anything</strong> in that language. What’s more is that once you’ve learned the types in one language, the vast majority will also be supported in any other language, with worst case being a slightly different name or syntax.</p>Anatomy of a Binary Executablehttps://oswalt.dev/2020/11/anatomy-of-a-binary-executable/Wed, 04 Nov 2020 00:00:00 +0000https://oswalt.dev/2020/11/anatomy-of-a-binary-executable/<p>Even though I’ve developed software for a number of years now, there’s one question that has always been in the back of my mind and I haven’t had the time or patience to really answer, until now: <strong>What <em>is</em> a binary executable anyways?</strong></p>