# Do not assume BB binary is used everywhere

**URL:** https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760
**Category:** Internals & Design
**Created:** [February 5, 2021, 2:28pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760 "2021-02-05T14:28:03Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)
#### Post date: [February 5, 2021, 2:28pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/1 "2021-02-05T14:28:03Z")

</div>

As I predicted, now you are just reinventing the wheel and create a new distro within a distro that is completely incompatible with the host system and can’t be used to interact with the system at all.

---

<div class="post-metadata">

### Author: ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)
#### Post date: [February 5, 2021, 4:58pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/2 "2021-02-05T16:58:42Z")

</div>

There’s little problem with however content is managed or things is compiled, as long as each libraries can still each other easily (i.e. not having some restrictions like flatpak) it would be a good package manager.

However, this is something that should be only one per system, instead of having one for each programming environment. If each environment (python, julia, whatever …) all have their own library to use (edit: and effectively require one to only use those), then there’s no way to use them with each other. This is what, as I said before, makes such assumption is very selfish.

Compared to, say python, where AFAICT, installing a package using prebuilt binary is supported but integrating it with other system is eqaually well supported, isn’t treated as second class citizen and it’s support isn’t constantly being deliberately broken.

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [February 5, 2021, 5:08pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/3 "2021-02-05T17:08:53Z")

</div>

this is nice, sometimes on a “badly managed” cluster, it’s hard to install some software without the support of IT (especially for an extended period of use, and in a reproduciable mannar).

(also lowkey highlight `fzf`, happy to see people enjoy using it as I do when I added it)

---

<div class="post-metadata">

### Author: ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)
#### Post date: [February 5, 2021, 5:37pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/4 "2021-02-05T17:37:06Z")

</div>

Yes, I agree having a user package manager is nice when the system one is not usable (no root access, windows, etc). Even just msys2 already saved me so much time on lab windows computers = = … But it is also harmful when there is a usable and working system one.

And even in the case where a user package manager is useful, it should be environment/language neutral. Each library/app/language can certainly implement support/integration with any of these, it’s only the assumption that this integration has to exist and the breakage of other setup that’s bad.

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [February 5, 2021, 5:50pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/5 "2021-02-05T17:50:46Z")

</div>

Ultimately users have to decide what’s the best setup for their context (in terms of usability, maintenance period of time etc.)

We’ve all been yelled by the system pkg manager because we `pip`ed some pkgs that system happens to rely on, this is why people invented virtual environment I guess.

Same thing happens with binary softwares. This is such a big problem that different detector groups on the same collider need to maintain monstrous software environments [[1]](https://github.com/cms-sw/cmssw) [[2]](https://gitlab.cern.ch/atlas/athena) just to babysit users. This creates HUGE headaches when some new software you need has collision with the slowly evolving bigger environment.

So to me since Julia has solved binary dependency for its pkgs’ use, it’s fine to expose those binaries to users, giving them more choices.

---

<div class="post-metadata">

### Author: ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)
#### Post date: [February 5, 2021, 10:53pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/6 "2021-02-05T22:53:05Z")

</div>

> [@yuyichao](#):
>
> Compared to, say python, where AFAICT, installing a package using prebuilt binary is supported but integrating it with other system is eqaually well supported, isn’t treated as second class citizen and it’s support isn’t constantly being deliberately broken.

Not to mention that Windows users are “forced” to use cross-compile builds instead of the much smaller VS binaries (when created ofc) and lots of files that are not need at all (e.g. \*.a, \*.h, etc)

---

<div class="post-metadata">

### Author: ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)
#### Post date: [February 6, 2021, 10:08pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/7 "2021-02-06T22:08:01Z")

</div>

> [@yuyichao](#):
>
> However, this is something that should be only one per system, instead of having one for each programming environment.

Why? What harm does having more than one cause?

> [@Announcing ygg](https://discourse.julialang.org/t/announcing-ygg/54687/9):
>
> Not to mention that Windows users are “forced” to use cross-compile builds instead of the much smaller VS binaries (when created ofc) and lots of files that are not need at all (e.g. \*.a, \*.h, etc)

Again, who cares? Slightly bigger binaries 🤷🏼‍♂️

This is a very opinionated take (I’m an opinionated kind of guy): OSes have simply failed at providing for robust, reproducible installation of software. Worse: the brittle, irreproducible software installation they do support is wildly different on each platform, even across Linux distros. We tried using native package installers on each OS. **It did not work.** Moreover, Python, Ruby, R, etc have all been trying to do this for decades and also failed. This approach simply does not work. It is a dead parrot.

So we have taken the matter into our own hands and in a few short years succeeded far better than any OS besides NixOs (and more portably than NixOs), at delivering people fully working binary stacks in a way that is fast, reliable, portable and reproducible.

Moreover, there _is_ a mechanism for letting people use system binaries if they want to. It’s called “overrides”. It requires some tooling work to be done in order for it to be very useful, but the basic functionality has been there from the first artifacts release. But no one has done any of that tooling work. Guess what? It’s open source. Someone who cares about JLL overrides needs to implement that tooling.

Anyway all this complaining about how Pkg works (emphasis on the word “works” because it does actually work) is misplaced because this thread is about `ygg` which you can simply choose not to use if you don’t want to. So I’m splitting it into a separate thread where the complaining can continue until morale improves.

---

<div class="post-metadata">

### Author: ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)
#### Post date: [February 6, 2021, 10:23pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/8 "2021-02-06T22:23:24Z")

</div>

> [@StefanKarpinski](#):
>
> So I’m splitting it into a separate thread where the complaining can continue until morale improves.

LOVE this!

---

<div class="post-metadata">

### Author: ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)
#### Post date: [February 6, 2021, 11:25pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/9 "2021-02-06T23:25:14Z")

</div>

I am honestly not sure what the problem would be with every language doing this.

It’s not hard drive space:  
We are down to about of 2 cents per GB on a hard drive.  
And about 25 cents per GB on a SSD.

I mean it just doesn’t seem like I’ma problem at all.

Years ago worked out my window machine had 5 seperate complete installs of Perl.  
I don’t think I had ever even programmed Perl on that computer.  
It just was bundled with things to run some of their utilities.  
Was it a problem? Not at all.

A few months back I removed 6 seperate installs of python from my Mac.  
Not virtual environments: totally seperate installs, because I was not really paying attention when using different package managers.  
Was that a problem?  
Only because I suck at managing my PATH.  
That one is on me.

I legit don’t understand the problem with Julia maintaining an awesome collection of cross compiled software that can be installed into the user’s home directory.

It was readily apparent to anyone that this was where it was going.  
It’s not like it was a deep revelation of some dark secret.  
The whole process of the binary builder ecosystem looks a lot like  
[http://www.linuxfromscratch.org/](http://www.linuxfromscratch.org/)

---

<div class="post-metadata">

### Author: ![mbaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbaz/32/17295_2.png) [@mbaz](https://discourse.julialang.org/u/mbaz)
#### Post date: [February 6, 2021, 11:42pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/10 "2021-02-06T23:42:39Z")

</div>

I’ve a couple of questions:

- Who is in charge of keeping up with security and updating packages?
- How can I see how each package is built and what patches are applied?
- What happens when two different packages require two different, incompatible versions of the same binary?

---

<div class="post-metadata">

### Author: ![simeonschaub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simeonschaub/32/216566_2.png) [@simeonschaub](https://discourse.julialang.org/u/simeonschaub)
#### Post date: [February 6, 2021, 11:56pm UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/11 "2021-02-06T23:56:54Z")

</div>

> [@mbaz](#):
>
> - Who is in charge of keeping up with security and updating packages?
> - How can I see how each package is built and what patches are applied?

All the build scripts are contributed by the community and hosted in the [Yggdrasil repository](https://github.com/JuliaPackaging/Yggdrasil). Packages critical to Julia base infrastructure are primarily maintained by the Julia core team, so security issues in those should get fixed in a timely manner. Otherwise, use at your own risk of course.

> [@mbaz](#):
>
> - What happens when two different packages require two different, incompatible versions of the same binary?

JLL packages are just regular Julia packages, so having different versions in different environments should not be a problem. I don’t think it’s possible to have different versions in the same environment, but dynamically linking different versions of the same library will likely cause problems anyways, not just in Julia.

---

<div class="post-metadata">

### Author: ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)
#### Post date: [February 7, 2021, 12:15am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/12 "2021-02-07T00:15:43Z")

</div>

> [@mbaz](#):
>
> I’ve a couple of questions:

- What happens if I want to debug a particular package using VS?

---

<div class="post-metadata">

### Author: ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)
#### Post date: [February 7, 2021, 12:28am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/13 "2021-02-07T00:28:36Z")

</div>

> [@oxinabox](#):
>
> It’s not hard drive space:  
> We are down to about of 2 cents per GB on a hard drive.  
> And about 25 cents per GB on a SSD.

A bit more expensive for laptops 🙂

 ![image](https://global.discourse-cdn.com/julialang/original/3X/2/7/27e39a956fb9a8948bf066e4472682ad41b6eb8f.jpeg)

---

<div class="post-metadata">

### Author: ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)
#### Post date: [February 7, 2021, 12:31am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/14 "2021-02-07T00:31:33Z")

</div>

> [@StefanKarpinski](#):
>
> Moreover, there _is_ a mechanism for letting people use system binaries if they want to. It’s called “overrides”. It requires some tooling work to be done in order for it to be very useful, but the basic functionality has been there from the first artifacts release. But no one has done any of that tooling work. Guess what? It’s open source. Someone who cares about JLL overrides needs to implement that tooling.

This is probably the most interesting part about the JLL system. As a developer, I look at the system and am like, won’t people need this? But we’ve been using it for now like what, 2 years? I haven’t seen a single user actually request it. Users requested information about it in BinDeps land all of the time, so what gives? What seems to have happened is that downloading pre-built binaries has worked so seamlessly that many users now don’t even know how many binaries they are using, so they don’t even question how to improve it. It even installs CUDA for users who don’t have it, [even from R](https://www.stochasticlifestyle.com/juliacall-update-automated-julia-installation-for-r-packages/). It “just works”.

So I echo @oxinabox : hard drive space is much cheaper than man hours. Giving someone a binary that actually works is pretty great. Linux distributions don’t tend to do that, but Ygg does. I really didn’t like BinDeps, Python Conda deps, etc. but I’ve had an overall positive experience with Ygg.

---

<div class="post-metadata">

### Author: ![mbaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbaz/32/17295_2.png) [@mbaz](https://discourse.julialang.org/u/mbaz)
#### Post date: [February 7, 2021, 12:55am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/15 "2021-02-07T00:55:38Z")

</div>

> [@simeonschaub](#):
>
> All the build scripts are contributed by the community

Thanks, Simeon. I am amazed (and thankful) by the amount of work and dedication that has been put into this, but endlessly frustrated that it was necessary in the first place.

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [February 7, 2021, 1:03am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/16 "2021-02-07T01:03:39Z")

</div>

how else can this possibly be solved? It’s not like Python doesn’t do it.

It’s simply a fact now that if a pkg `pyX` need software X with a version that is not compatible with your system (for many good reason, e.g , `pyX` is used in a production system or a lab where updates happen much slower due to compatibility).

(I want to point our this even happens with your “system software” which is why Ubuntu initiated the much hated Snap store. I don’t like it because it bloats your system, but clearly this is a very common problem in any environment.

Another solution is to always live on the edge and use ~newest versions of ALL the upstream dependencies, which is what distros like Arch picked. But this is almost impossible in big production environment or lab that heavily depends on legacy software)

Julia does this much more consistently than python because `_jll` are managed / dependency-resolved just like regular julia package.

---

<div class="post-metadata">

### Author: ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)
#### Post date: [February 7, 2021, 1:14am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/17 "2021-02-07T01:14:16Z")

</div>

> [@joa-quim](#):
>
> A bit more expensive for laptops

Here you go, 12 US cents per GB and it even comes with a USB-C cable.

 ![image](https://global.discourse-cdn.com/julialang/original/3X/6/5/65b9e3a23d396bf95f611bab7c081373d633e80b.jpeg)

---

<div class="post-metadata">

### Author: ![Oscar\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oscar_smith/32/25343_2.png) [@Oscar\_Smith](https://discourse.julialang.org/u/Oscar_Smith)
#### Post date: [February 7, 2021, 1:16am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/18 "2021-02-07T01:16:16Z")

</div>

Yeah. Apple takes a 200% margin on storage upgrades. They’re basically just taking a standard nvme SSD and upcharging you a ton. For comparison, Dell only charges $225 for a 1TB upgrade (from 256gb base).

---

<div class="post-metadata">

### Author: ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)
#### Post date: [February 7, 2021, 1:30am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/19 "2021-02-07T01:30:50Z")

</div>

I have a Dell too but my point is: why do the JLLs install tons of files that are not needed at all (and amount to GB of disk space + slowness when Windows is indexing them)? All that is needed is a .dll/.so but a Julia with a moderately small number of packages installs 100 thousands of needless files in `.julia/artifacts`.

And there is my other point, What if I want to debug an artifact from Windows with VS? I can’t (even assuming the artifact could be built in debug mode) because Windows users have to use what \*nix considers good to Windows users.

I know I’m bein unfair with the above because what is available is kindly offered by people who had a lot of work to make it work. But why not promoting JLLs built with Visual Studio as well? Most of them have now CMake solutions that would allow VS binaries for Windows.

---

<div class="post-metadata">

### Author: ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)
#### Post date: [February 7, 2021, 1:45am UTC](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760/20 "2021-02-07T01:45:13Z")

</div>

If you have a hankering to add support for building MSVC binaries to BinaryBuilder and Yggdrasil, I don’t think anyone would object. If you want to use native libraries, the overrides system exists — one “merely” needs the will to use it. Also, it’s not like this was possible before BinaryBuilder.

[Next page](https://discourse.julialang.org/t/do-not-assume-bb-binary-is-used-everywhere/54760.md?page=2)
