===== Marshall Kirk McKusick: An Introduction to the Filesystems and Networking in the FreeBSD Open-Source Operating System Who Should Take this Course This course provides a broad overview of how the FreeBSD kernel implements its basic services. It will be most useful to those who need to learn how these services are provided. Individuals involved in technical and sales support can learn the capabilities and limitations of the system; applications developers can learn how to effectively and efficiently interface to the system; systems programmers without direct experience with the FreeBSD kernel can learn how to maintain, tune, and interface to such systems. This course is directed to users who have had at least a year of experience using a UNIX-like system. They should have an understanding of fundamental algorithms (searching, sorting, and hashing) and data structures (lists, queues, and arrays). Description This course will provide a firm background in the filesystems and networking capabilities supported by the FreeBSD kernel. The course describes the VFS filesystem interface that supports multiple filesystem types. The course covers the implementation and capabilities of the UFS filesystem and the techniques for maintaining filesystem consistency. The filesystem section ends with a description of the ZFS filesystem capabilities, implementation, and integration into FreeBSD. The course also covers the socket-based network architecture, layering, and implementation. The socket communications primitives and internal layering will be discussed, with emphasis on the interfaces between the layers; the TCP/IP implementation will be used as an example. A discussion of routing issues and the netmap interface will be included. The presentations will emphasize code organization, data structure navigation, and algorithms. It will not cover the machine specific parts of the system such as the implementation of device drivers. Morning - Filesystems Overview Filesystem organization Block I/O system (buffer cache) Support for multiple filesystems UFS Filesystem implementation ZFS Filesystem implementation Afternoon - Networking Implementation System layers and interfaces Internet Protocols Mbufs and control blocks Routing issues TCP algorithms Course Text Prior to taking the course, students are recommended to obtain a copy of the course text: Marshall Kirk McKusick, George Neville-Neil, and Robert N. M. Watson, ``The Design and Implementation of the FreeBSD Operating System'', Second Edition, Pearson Education, Boston, MA September 2014, ISBN-13: 978-0-321-96897-5, ISBN-10: 0-321-96897-2. Marshall Kirk McKusick: Dr. Marshall Kirk McKusick's work with Unix and BSD development spans four decades. It begins with his first paper on the implementation of Berkeley Pascal in 1979, goes on to his pioneering work in the eighties on the BSD Fast File System, the BSD virtual memory system, the final release of 4.4BSD-Lite from the University of California at Berkeley Computer Systems Research Group, and carries on with his work on FreeBSD. A key figure in Unix and BSD development, his experiences chronicle not only the innovative technical achievements but also the interesting personalities and philosophical debates in Unix over the past forty years. ===== Massimiliano Stucchi: BGP 101 (on BSD) This tutorial aims at teaching the basics of the BGP Protocol and some of the current best operational practices. The agenda of the tutorial is the following: - Introduction to routing - Difference between IGP and EGP - Brief introduction to OSPF/IS-IS - Introduction to BGP - Exercise: Setting up a BGP Session with an upstream - The BGP State machine and message types - Exercise: Setting up a BGP Customer - BGP Attributes - Traffic engineering using BGP - Exercise: Configuring localpref and communities on a BGP Session - Scaling BGP, Route Reflectors - Exercise: Move your network to use a RR - Introduction to Routing Security - Introduction to MANRS - The Internet Routing Registry - Exercise: Create your IRR Entries in the local IRR - Setting up filters based on the IRR - Exercise: Create filters for your upstream and your customer(s) - Introduction and demo on PeeringDB - Introduction to RPKI Each participants will get a lab environment with routers based on OpenBGPd, FreeBSD + Bird and FreeBSD + FRR. Basic knowledge of routing is required. A laptop with a working web browser is required. Massimiliano Stucchi: Massimiliano "Max" Stucchi joined the Internet Society in 2019 as Technical Advisor for the European region. His previous experiences are as a trainer and IPv6 Programme Manager at the RIPE NCC, and before that he was the founder and technical director of a small Internet Service Provider and Wireless Internet Service Provider in Northern Italy. Max is a long time Unix fellow, with a specific love for FreeBSD and OpenBSD, which he's been using for around 20 years now. His interest also cover BGP, Routing Security, DNS and of course, IPv6. If possible, he tries to contribute to the development of these technologies by participating in the IETF. ===== Janne Johansson: ELF binaries and all the things that happen before main() In this tutorial we will look at how the most common ELF sections, object files, shared and static libraries work, and the role of ld.so when executing programs, up to the point where execution where main() starts. It will be described from a BSD C programmer perspective, and covers some of the arch-specific problems GOT/PLT need to solve for finding locations to call at runtime. Also included are the later OpenBSD changes done to harden this part of the runtime environment. Janne Johansson: Janne Johansson started using OpenBSD around 2.2 on sparc32 and amiga-m68k, and has been known to sneak in BSDs at workplaces ever since. Organizer of 5 OpenBSD fundraiser/conference events at Stockholm University called Slackathons and the 2015 EuroBSDCon, and occasionally doing actual development for OpenBSD. Has a weird fascination for non-mainstream platforms and arches, and is currently collecting octeon/mips64 machines to run OpenBSD on. ===== Patrick M. Hausen: Using Vagrant as a FreeBSD development platform for fun and profit Hashicorp Vagrant is a powerful platform for local automated creation and deployment of virtual machines. I'll show the basics and two practical examples of how to use Vagrant to create FreeBSD based development environments on a suitable machine. Participants need an amd64 laptop and VirtualBox and Vagrant installed on their operating system of choice to follow the practical parts of the tutorial. I'm using NFS for folder sharing, so Windows is probably out. Mac OS, any BSD that supports VirtualBox, or Linux will all do fine. Full source code will be provided on Github. Patrick M. Hausen: Patrick M. Hausen, born 1968, developed an interest in “all things Unix” and networking in general in the late 80’s. Having worked on various commercial implementations and looking for an operating system that would be more capable than Minix for actual daily use at home he found out about FreeBSD in 1993. He’s been using, hacking, advocating and occasionally cursing FreeBSD ever since. ==== Li-Wen Hsu: Becoming a FreeBSD Developer In this hands-on workshop, we aim to guide you in making your first contribution to the FreeBSD doc/ports/src tree. Our tutorial will equip you with the know-how to prepare a patch and submit it, ensuring it gets the attention of FreeBSD committers. Moreover, we'll illustrate how consistent contributions can set you on the path of becoming a FreeBSD committer yourself. The tutorial begins with the essentials: setting up the development environment of the doc/ports/src tree. We'll guide you through obtaining the latest source code, working on development and testing, and collaborating with fellow developers and contributors. Additionally, we'll emphasize how to keep abreast of the latest updates. In each domain - docs, ports, and src - we'll showcase specific skills. For docs, we'll demonstrate how to edit websites and documents, including previews. In the ports domain, we'll highlight the preparation and utilization of common tools for port testing. As for the src domain, we'll dive in making changes in the userland, manual pages, and kernel, and do testing. A part of our tutorial will focus on how to interact effectively with the development services at FreeBSD.org, such as the review system and issue tracker. We'll also direct you to resources for help when you encounter questions. We will also share practical tips and the things to be aware for developing in the doc/ports/src tree, aiming to facilitate a more efficient and smoother development cycle. For a more interactive experience, we'll bring a list of low-hanging fruit from FreeBSD Bugzilla, hoping to get patches committed (time and difficulty permitting). If you have your patch in ready or WIP status, you're most welcome to bring it along for discussion on how to further its progress. Note: Participants are expected to bring their own laptop, have a basic understanding of FreeBSD system, and some basic scripting and programming skills. If FreeBSD is not your primary operating system, please prepare a FreeBSD 13.2-RELEASE (or 14.0-RELEASE if available) or -CURRENT virtual machine in advance. Li-Wen Hsu: Li-Wen has been involved with FreeBSD since 1999 and received his FreeBSD commit bit in ports in 2007, then src bit in 2018 and doc bit in 2021. He joined the FreeBSD continuous integration team in 2013, then clusteradm. He helped the subversion to git migration and setting up the production git infrastructure. In 2022, he was elected as one of the members in the 12th core team. He works as a software engineer at the FreeBSD Foundation since 2018. Other than development, he regularly organizes FreeBSD related community resources and events in Taiwan, and also helps with the BSD events in other parts of Asia. In the spare time, he enjoys scuba diving, cycling and snowboarding. https://lwhsu.org =====