I have a small homelab running a few services, some written by myself for small tasks - so the load is basically just me a few times a day.

Now, I’m a Java developer during the day, so I’m relatively productive with it and used some of these apps as learning opportunities (balls to my own wall overengineering to try out a new framework or something).

Problem is, each app uses something like 200mb of memory while doing next to nothing. That seems excessive. Native images dropped that to ~70mb, but that needs a bunch of resources to build.

So my question is, what is you go-to for such cases?

My current candidates are Python/FastAPI, Rust and Elixir, but I’m open for anything at this point - even if it’s just for learning new languages.

  • atomkarinca@lemmygrad.ml
    link
    fedilink
    arrow-up
    3
    ·
    3 months ago

    Are you planning to compile the programs on the thin client? Although rust runs efficiently on a lot of hardware, compiling is gut-wrenching.

    I have an rPi 1B running as a lightweight server and both rust and c++ applications take hours to compile (some of them take over a DAY). so, interpreted languages might be what you’re looking for. my favorite is python. most distros have a lot of native packages in their repos. albeit a little weird to work on, perl is great, too.

    • felsiq
      link
      fedilink
      arrow-up
      3
      ·
      3 months ago

      To add to this, with rustup you can add different build targets than the current system - could let you build the binary on a more powerful pc and then just scp it over.

      • Ephera@lemmy.ml
        link
        fedilink
        arrow-up
        5
        ·
        edit-2
        3 months ago

        Yeah, we do this regularly at $DAYJOB, although we use Cross.

        Basically, if you pull in any libraries with vendored C code, like e.g. OpenSSL, then you’d need to configure a linker and set up cross-compilation for C code.
        Cross does the whole compilation in a container where this is already set up, so you just need to install Docker or Podman on your host system.

        Basically:

        cargo install cross
        
        cross build --release --target=armv7-unknown-linux-gnueabihf
        

        …and out plops your binary for a Raspberry Pi.