this post was submitted on 04 Aug 2024
293 points (89.1% liked)

Programmer Humor

19486 readers
636 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 

Am I out of touch?

No, it's the forward-thinking generation of software engineers that want elegant, reliable, declarative systems that are wrong.

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 31 points 3 months ago (4 children)

I'm not against immutable distro's on principle. I imagine they still have some kinks to iron out, but I haven't looked in on them for a while.

My opinion on these things is; if it's a superior system, then it'll become the new standard, that's always what happens, and the naysayers are largely irrelevant. Just like computers, smart phones, the internet, etc.

[–] [email protected] 6 points 3 months ago

if it’s a superior system, then it’ll become the new standard

Not even remotely close to how it works. Remember: we had pulseaudio as the "new standard" for a decent while.

[–] [email protected] 2 points 3 months ago

It's been two decades. What kinks do you think NixOS has yet to iron out?

[–] [email protected] 13 points 3 months ago (1 children)

if it’s a superior system, then it’ll become the new standard,

That's not how it usually works, unfortunately...

[–] [email protected] 5 points 3 months ago

Yeah, everyone knows the new standard will be whatever gets the backing of the porn industry.

[–] [email protected] 20 points 3 months ago (1 children)

Yeah. I think they'll catch on in much the same way that lock files have become the standard in many languages. IMO, it just makes more sense to declare all dependencies atomically. I also think/hope it will supplant our overreliance on Docker containers to achieve these kinds of guarantees (where it actually makes sense or presents undeniable benefits).

[–] [email protected] 6 points 3 months ago* (last edited 3 months ago) (1 children)

In the case of docker I'm already at the point where I no longer think it's necessary. At my current job our stack is JS, PHP and Python. 3 interpreted languages, we then build on Ubuntu and deploy on Ubuntu. I don't think our project really needs docker, even though it does use it. We also have wasm/wasi prepping to eat Docker's lunch.

[–] [email protected] 22 points 3 months ago* (last edited 3 months ago)

I’d look into building all of that in a flake just so you can encapsulate (and have a central version control of) all of your dependencies in case something does change.

I’m a bit of a Nix dork but I tend to try and declare my entire dev stack in a flake so it can follow me to every machine. It offers some of the “it works on every machine” guarantees that Docker offers while also forcing the compilation of the stack to happen natively (or at least pulls in some content addressed cache that offers security by being the exact hash for the whole dependency graph). I like that

Here’s how I used the Nix way to declare an interactive Python scraper the other day. With this method, I can lock dependencies between machines as a matter of course without having to use Docker:

{
  description = “Weed Scraper”;

  inputs = {
    nixpkgs.url = “github:NixOS/nixpkgs?ref=nixpkgs-unstable”;
    utils.url = “github:numtide/flake-utils”;
  };

  outputs = { self, nixpkgs, utils }: utils.lib.eachSystem [“x86_64-linux”] (system: let
    pkgs = import nixpkgs { system = system; };
  in rec {
    packages = {
      pythonEnv =
        pkgs.python3.withPackages (ps: with ps; [ webdriver-manager openpyxl pandas requests beautifulsoup4 websocket-client selenium keyboard ]);
    };

    devShell = pkgs.mkShell {
      buildInputs = [
        pkgs.chromium
        pkgs.undetected-chromedriver
        packages.pythonEnv
      ];

      shellHook = ‘’
        export PATH=${pkgs.chromium}/bin:${pkgs.undetected-chromedriver}/bin:$PATH
      ‘’;
    };
  });
}