SerenityOS / serenity

The Serenity Operating System 🐞
https://serenityos.org
BSD 2-Clause "Simplified" License
30.76k stars 3.18k forks source link

SerenityOS does not build from a musl libc-based host #16463

Open ddevault opened 1 year ago

ddevault commented 1 year ago

Many GNU-isms are present throughout the code, too numerous to enumerate in separate tickets. I will send patches for a few of them, but this has been an issue for a long time. Can a musl-based host be added to the Serenity CI to prevent the introduction of future non-portable behavior?

ADKaster commented 1 year ago

Unless my docker container was misleading me, the Lagom build should fully work on a musl-based host now.

I did run into one test, TestTLSHandshake which fails in an alpine:latest container on some suspicious struct addrinfo adventures.

Still not sure where to add an alpine CI job though. It looks like it's easier to do that in GitHub actions than azure DevOps using containers, but we already have all our Lagom testing happening in Azure.

trflynn89 commented 1 year ago

Still not sure where to add an alpine CI job though. It looks like it's easier to do that in GitHub actions than azure DevOps using containers, but we already have all our Lagom testing happening in Azure.

GHA is probably just as easy, but in Azure you can point at a DockerHub container with one statement:

container: <namespace>/<repo>:<tag>
ADKaster commented 1 year ago

For ADO it seems it's more of a bring your own container affair:

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/container-phases?view=azure-devops#non-glibc-based-containers

At least they have a template for you to use :man_shrugging: https://learn.microsoft.com/en-us/azure/devops/pipelines/process/container-phases?view=azure-devops#full-example-of-a-dockerfile

I guess to use the container properly we'd want to load it up with the build requirements as well, so probably not that much of a dealbreaker. I already started looking into that on a personal repo, but I don't really know how to setup the proper rennovate-bot or dependabot for docker containers to make that a reasonable solution.