Giter Club home page Giter Club logo

Comments (2)

theAkito avatar theAkito commented on June 4, 2024

it's sort of like refining a piece of code: you make improvements to a particular section and then actually run it to see if the changes are good (in this analogy, "code changes" are like changing your goldboot config, and "running it" is like building a new image and trying it out).

I think, that is a natural step on the path to crafting a golden image. Revisions, etc. are very helpful, especially if you, for example, changed to a different method, strategy or approach in solving the same problem. For example, there might be a software solution to your problem, that has become deprecated or unmaintained, so you switch to the replacement. It is then nice to be able to look back, to see, when, why & how you changed it.

The "trying out" aspect is way harder with operating system images. Usually, I like a rapid develop, then trial & error approach, when developing software, because it is a convenient & relatively easy way of achieving your goal, without overthinking (& -engineering) your solution, especially if you make tons of little apps for little problems, as I do in my free time.
With operating systems it is not that simple, because there are in most cases so many problems to solve. "Trying out" every feature you need, can take days, if you do not have a huge, pre-configured test suite, specifically configured for this particular use-case.

My personal experience with having a bit of pre-configured Linux systems started out with plebby Bash scripts, simply installing stuff & configuring some basic configuration files, automatically, on first run, after installation.
I tried different approaches & none of them were even close to what'd be needed to achieve a fully automatic installation process for a complex machine, especially if it's not a one-purpose server, but your personal dev machine.

For my Raspberry Pi servers, I use DietPi. It offers some kind of configuration, though it's not really declarative & is based on ancient UNIX/Linux style, which is basically anti-human. Still - way better, than having custom made pleb Bash scripts running.

I also work a lot with Borg. It's so versatile, it can be even used to make configurations happen, quickly.

The Linux distribution, which currently is closest to the ideal of having a completely declaratively configured operating system is, of course, NixOS. However, it has lots of issues, especially if you rely on compatibility & workarounds for special cases. It also takes a lot of work sometimes, to even achieve simple things.

This is where Goldboot offers a new level to declarative operating system configuration. It is another meta-level up, theoretically supporting any operating system. This is what makes this solution so strong.

Based on my experience, which I have summarised in that little diversion, I will use that Goldboot image & always, instantly pick up & record improvements, which come to my mind. If my image is pretty new & is still in the development process, I will constantly take notes of ideas, that come up, while using it. I will probably also build it quite frequently, to get a state of the OS, which I can use daily, without noticing too huge mistakes.
Once the state is reached, which allows me to use it as a daily driver, I will keep picking up small issues & take notes of them. Then, once they pile up, I will improve the configuration accordingly & build a new image.
Repeating that over a long period of time, I will reach a satisfaction rate of 99%, at some point. This will probably be as good as it gets & the image may then be considered "golden".

So, essentially, the image configuration evolving process is majorly made out of a huge amount of incremental, mostly little, changes to the configuration. It is a refining process, like polishing a statue or something like that.

The problem with setting up something from scratch to revisit past decisions (in a dry run environment) is time & nerves.
It takes way too much time & effort. Once you have evolved a pretty golden image in your head about your system & are confident in your decisions, then revisiting would be more harmful, than helpful.
The revisiting also is handled better anyway, while using it. If you revisit it passively, i.e. while just looking at the configuration or starting to manually set up the system, you are not really revisiting it. You are just revisiting the blueprint.
To really actively revisit your past decisions, you just have to use the particular feature in your image, that you have chosen to solve a particular problem & question it while using it.
This is how you actually, actively revisit the decision, while actually evaluating the behaviour, rather than just reading the blueprint of the solution.

Therefore, I think, that the approach of refining an image over long periods of time through mostly tiny, incremental changes is the way to go & the most approachable. It's the most natural & best to achieve.

from goldboot.

cilki avatar cilki commented on June 4, 2024

@theAkito Yep, I think we're on the same page on all of this. When I setup a system from scratch, I might do some things better and some things worse than the previous time. The idea here is to "save" the things you've already done right and improve everywhere else.

On testing speed, since these images are built in VMs anyway, it would be easy to add a "try before you buy" feature where you can drop into a VM for testing without having to actually install the image on real hardware first.

from goldboot.

Related Issues (12)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.