Title: Experimenting with a new OpenBSD development lab
       Author: Solène
       Date: 16 September 2021
       Tags: openbsd life
       Description: 
       
       # Experimenting
       
       This article is not an how to or explaining anything, I just wanted to
       share how I spend my current free time.  It's obviously OpenBSD
       related.
       
       When updating or making new packages, it's important to get the
       dependencies right, at least for the compilation dependencies it's not
       hard because you know it's fine once the building process can run
       entirely, but at run time you may have surprises and discover lacking
       dependencies.
       
       # What's a dependency?
       
       Software are made of written text called source code (or code to make
       it simpler), but to avoid wasting time (because writing code is hard
       enough already) some people write libraries which are pieces of code
       made in the purpose of being used by other programs (through fellow
       developers) to save everyone's time and efforts.
       
       A library can propose graphics manipulation, time and date functions,
       sound decoding etc... and the software we are using rely on A LOT of
       extra code that comes from other piece of code we have to ship
       separately.  Those are dependencies.
       
       There are dependencies required for building a program, they are used
       to manipulate the source code to transform it into machine readable
       code, or for organizing the building process to ease the development
       and so on and there are libraries dependencies which are required for
       the software to run.  The simplest one to understand would be the
       library to access the audio system of your operating system for an
       audio player.
       
       And finally, we have run time dependencies which can be found upon
       loading a software or within its use.  They may not be well documented
       in the project so we can't really know they are required until we try
       to use some feature of the software and it crashes / errors because of
       something missing.  This could be a program that would call an extra
       program to delegate the resizing of a picture.
       
       # What's up?
       
       In order to spot these run time dependencies, I've started to use an
       old laptop (a thinkpad T400 that I absolutely love) with a clean
       OpenBSD installation, lot of local packages on my network (see it
       later) and a very clean X environment.
       
       The point of this computer is to clean every package, install only one
       I need to try (pulling the dependencies that come with it) and see if
       it works under the minimal conditions.  They should work with no issue
       if the packages are correctly done.
       
       Once I'm satisfied with the test process, I will clean every packages
       on the system and try another one.
       
       Sometimes, as we have many many packages installed, it happens we have
       a run time dependency installed by that is not declared in the software
       package we are working on, and we don't see the failure as the
       requirement is provided by some other package.  By using a clean
       environment to check every single program separately, I remove the
       "other packages" that could provide a requirement.
       
       # Building
       
       When I work on packages I often need to compile many of them, and it
       takes time, a lot of time, and my laptop usually make a lot of noise
       and is hot and slow to do something else, it's not very practical.  I'm
       going to setup a dedicated building machine that I will power on when
       I'll work on ports, and it will be hidden in some isolated corner at
       home building packages when I need it.  That machine is a bit more
       powerful and will prevent my laptop to be unusable for some time.
       
       This machine in combination with the laptop are a great combination to
       make quick changes and test how it goes.  The laptop will pull packages
       directly from the building machine, and things could be fixed on the
       building machine quite fast.
       
       # The end
       
       Contributing to packages is an endless work, making good packages is
       hard work and requires tests.  I'm not really good at doing packages
       but I want to improve myself in that field and also improve the way we
       can test packages are working.  With these new development environments
       I hope I will be able to contribute a bit more to the quality of the
       futures OpenBSD releases.