# Are some packages "official", in some sense?

**URL:** <https://discourse.julialang.org/t/are-some-packages-official-in-some-sense/23724>\
**Category:** General Usage\
**Tags:** package\
**Created:** [May 1, 2019, 6:26am UTC](https://discourse.julialang.org/t/are-some-packages-official-in-some-sense/23724 "2019-05-01T06:26:41Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![PeterB](https://avatars.discourse-cdn.com/v4/letter/p/e8c25b/32.png) [@PeterB](https://discourse.julialang.org/u/PeterB)\
**Post date:** [May 1, 2019, 6:26am UTC](https://discourse.julialang.org/t/are-some-packages-official-in-some-sense/23724/1 "2019-05-01T06:26:41Z")

</div>

I am delivering Julia code to a customer. Can I be “sure” that some packages will be available for them to download by simply running a little program I give them, which just runs the appropriate Pkg.add() commands?

To be specific, I mean the packages Distributions, Roots and SpecialFunctions. I am running Julia 1.0.

I am currently describing them as “third party packages”, but they appear to be more than that; they appear to be quasi-official, in some sense. Is there any term which distinguishes those packages from a random bit of software I might write and put on Github?

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [May 1, 2019, 6:52am UTC](https://discourse.julialang.org/t/are-some-packages-official-in-some-sense/23724/2 "2019-05-01T06:52:41Z")

</div>

> [@PeterB](#):
>
> Can I be “sure” that some packages will be available for them to download by simply running a little program I give them, which just runs the appropriate Pkg.add() commands?

Not in any legal sense, since it is depends on a whole chain of services provided by third parties (Github, package maintainers).

But in a practical sense, repositories usually remain available, and for registered packages there are mirrors like

> **[UnofficialJuliaMirror · GitLab](https://gitlab.com/UnofficialJuliaMirror)**
>
> Mirror of Julia packages and other Julia-related repositories. https://github.com/UnofficialJuliaMirror/MirrorUpdater.jl

in case something would disappear. Note that you would have to modify your install script though.

In practice, the opposite (packages being abandonned but available) is a much bigger concern.

By bundling a `Manifest.toml` and using `Pkg.resolve()`, you can test and replicate a specific set of versions. This should be very robust.

---

<div class="post-metadata">

**Author:** ![tlienart](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tlienart/32/7640_2.png) [@tlienart](https://discourse.julialang.org/u/tlienart)\
**Post date:** [May 1, 2019, 6:56am UTC](https://discourse.julialang.org/t/are-some-packages-official-in-some-sense/23724/3 "2019-05-01T06:56:42Z")

</div>

You might also like to consider the list of packages in JuliaPro ([https://juliacomputing.com/products/juliapro.html#juliapackages](https://juliacomputing.com/products/juliapro.html#juliapackages)). AFAIK a package being there is not official in any strong sense but it might still reassure your client that it’s “standard” in some way. (Distributions and Roots are in the list, not specialfuns)

---

<div class="post-metadata">

**Author:** ![PeterB](https://avatars.discourse-cdn.com/v4/letter/p/e8c25b/32.png) [@PeterB](https://discourse.julialang.org/u/PeterB)\
**Post date:** [May 1, 2019, 7:28am UTC](https://discourse.julialang.org/t/are-some-packages-official-in-some-sense/23724/4 "2019-05-01T07:28:12Z")

</div>

> (Distributions and Roots are in the list, not specialfuns)

I am kind of surprised that SpecialFunctions is not there, because at least some of them used to be part of Julia 0.x. But it is no big deal in my case, because I only need if for lfactorial (i.e. log factorial), and I can write my own log-factorial function easily enough.

---

<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:** [May 1, 2019, 2:37pm UTC](https://discourse.julialang.org/t/are-some-packages-official-in-some-sense/23724/5 "2019-05-01T14:37:18Z")

</div>

> [@PeterB](#):
>
> Distributions, Roots and SpecialFunctions

These packages definitely aren’t going anywhere 😃. If your customer wants an officially supported set of Julia packages, [Julia Computing](https://juliacomputing.com) does offer support and is willing to add packages that customers need to the JuliaPro package set (that’s how most of the packages got there in the first place—some customer needed them). But I don’t think you need to worry about these particular packages.

---

<div class="post-metadata">

**Author:** ![simonbyrne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonbyrne/32/19_2.png) [@simonbyrne](https://discourse.julialang.org/u/simonbyrne)\
**Post date:** [May 1, 2019, 4:57pm UTC](https://discourse.julialang.org/t/are-some-packages-official-in-some-sense/23724/6 "2019-05-01T16:57:32Z")

</div>

> [@PeterB](#):
>
> Can I be “sure” that some packages will be available for them to download by simply running a little program I give them, which just runs the appropriate Pkg.add() commands?

As an aside, you should probably provide them with `Project.toml`/`Manifest.toml` files, and use `Pkg.instantiate()` instead, which will ensure they get the correct versions, and deal with problems if packages are renamed, etc.

While the packages might not go anywhere, they could change their interface (e.g. functions could get renamed, etc.), so you would want to ensure you get a version that matches the behaviour you want.
