Signaling "production-ready" for Julia packages, MATLAB.jl as an example

Julia follows semver (and its packages should too):

  1. Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.

  2. Version 1.0.0 defines the public API.

So should users (always) take 1.0 as a signal that code is “production-ready”? Or more importantly, that it isn’t (usually) if pre-1.0 (or pre-0.1.0?). Should we push for packages to be upgraded to 1.0 if we think they are?

In Julia with its package manager (i.e. for “reproducable science”), there’s not really a reason to avoid pre-1.0 packages, if you’re worried about API breakage you can just pin to a specific exact version. Later changes to not affect you, so nothing will actually change for the user.

Some very important Julia packages at pre-1.0 that I consider all production-ready (except maybe Flux):

  • Pluto.jl
  • CxxWrap.jl
  • RCall.jl
  • DataStructures.jl
  • Flux.jl (not production ready? mostly still used for research?)
  • MATLAB.jl

Of those the only package I’ve used directly is MATLAB.jl (and maybe DataStructures.jl or at least indirectly as most of us must have done), was very solid for me, while e.g. OctCall.jl for calling Octave, MATLAB’s clone, isn’t. At least I wouldn’t hesitate to use MATLAB.jl in production (at the time, I only used it to help me port some MATLAB code to Julia), and I may need to do that now. [Will also look into compiling MATLAB to C.]

Note, OctCall.jl isn’t yet registered, and that’s a huge signal not yet production-ready, while being registered, is for the benefit of (other) users.

Being registered, alone, isn’t a great indicator of anything, let alone being well-documented.

JuMP.jl at 10-years old hit 1.0 recently… I’m guessing production-ready for a lot longer.

1 Like

Related discusions, for what is worth:

3 Likes

DataStructures.jl is a good example of where it probably isn’t good for 1.0 but can be used in production. They need to split it into smaller packages but you can probably use it in production without any serious consequences.

It’s great to get people to signal “production-ready” by going to 1.0, but since:

I guess all packages are… unless marked “experimental”.

in particular, i only register a package when it is ready for general use. but i still start at 0.1.0, so, my bad