256lights / zb

An experiment in hermetic, reproducible build systems
MIT License
185 stars 3 forks source link

Windows userspace #6

Open zombiezen opened 2 months ago

zombiezen commented 2 months ago

I want to build a Windows proof-of-concept once #5 is finished. I'm imagining the bootstrap sequence is:

  1. Download Visual Studio C compiler binaries
  2. Build PowerShell from scratch

For reference, Go uses Batch for its bootstrap, so PowerShell may not even be necessary for common recipes, but the syntax seems helpful.

zombiezen commented 1 week ago

So far I've verified that the backend test suite runs on Windows. Keeping this issue open to actually create a userspace.

puetzk commented 19 hours ago

Historically, it was both technically possible and legally permissible to simply copy the C++ compiler (and its included libs and headers) to a build server, without an installer, which could feasibly have been cached and used as a content-addressable thing:

E.g. https://learn.microsoft.com/en-us/visualstudio/releases/2015/2015-redistribution-vs#visual-c-buildserver-files https://learn.microsoft.com/en-us/visualstudio/releases/2017/2017-redistribution-vs#-list-of-build-server-files-for-visual-studio-2017

This went away in the distributable code for Visual Studio 2019/2022 - I think supplanted by the "Build Tools for Visual Studio" installer (see https://visualstudio.microsoft.com/downloads/, under "Tools for Visual Studio" - this has just the compiler, no IDE GUI, etc). But, packaged as an installer, it's not going to fit a content-addressible-cache model nearly so well. But it is available separately, and the EULA still has

  1. Installation and use rights include d. Separately, if you don’t have a valid license to any of the Visual Studio Products you may still install and use copies of the software to compile and build C++ components that (i) have been released by a third party under an open-source software license approved by the Open Source Initiative; and (ii) are also reasonably required to build your applications (“Open Source Dependencies”).

Which would seems to be applicable to a stdenv-like bootstrap. It's just the the packaging in an installer is going to be less convenient to incorporate...