# Package negligence

**URL:** <https://discourse.julialang.org/t/package-negligence/97434>\
**Category:** New to Julia\
**Tags:** package\
**Created:** [April 13, 2023, 5:37pm UTC](https://discourse.julialang.org/t/package-negligence/97434 "2023-04-13T17:37:45Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Charles\_Brauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/charles_brauer/32/48688_2.png) [@Charles\_Brauer](https://discourse.julialang.org/u/Charles_Brauer)\
**Post date:** [April 13, 2023, 5:37pm UTC](https://discourse.julialang.org/t/package-negligence/97434/1 "2023-04-13T17:37:45Z")

</div>

Hello.

I’m a 25-year veteran of Microsoft’s C#, and I’ve become very discouraged by the status of the Machine Learning ([ML.NET](http://ML.NET)) project at Microsoft. It seems to be dying, and developers are left holding an empty bag.

So, I’ve come over to Julia to see if life is better. My early experience was both good and bad.

Let me talk about the bad side of Julia. Like Python, Package neglect is a problem. For example, being interested in Smoothing Splines, I naturally looked at “SmoothingSplines.jl”. The GitHub REPO shows that this package has not been maintained in two years, and it can no longer be compiled by Julia 1.8.5.

My question to the Julia community is: “What is your policy on Package neglect”?

Charles

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [April 13, 2023, 5:54pm UTC](https://discourse.julialang.org/t/package-negligence/97434/2 "2023-04-13T17:54:19Z")

</div>

I installed SmoothingSplines on Julia 1.8.5 without any problem. Also the tests passed.

So in this case I do not see any problem. I am using Linux, though. What are you using?

Make sure you install it in a clean project, e.g.

```bash
mkdir Splines
cd Splines
julia --project="."

```

and then in Julia:

```julia
using Pkg
Pkg.add("SmoothingSplines")
Pkg.test("SmoothingSplines")
using SmoothingSplines

```

Does this work for you, or which step fails?

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [April 13, 2023, 6:25pm UTC](https://discourse.julialang.org/t/package-negligence/97434/3 "2023-04-13T18:25:55Z")

</div>

EDIT: TL;DR, there was a practical problem, but no more.

> [@Charles\_Brauer](#):
>
> The GitHub REPO shows that this package has not been maintained in two years, and it can no longer be compiled by Julia 1.8.5.

I’m surprised, since that’s claimed to be not true. Since you’re new, if the package has a Project.toml file it should work (I’m not aware of any packages for pre-1.0 Julia only, that are registered are registered). You can see in that file [compat] and there under julia = “1.0”. That doesn’t mean only 1.0 works, it refers to oldest version that that should work. And I’m not sure it’s even needed in that case (is 1.0 automatically implied?).

There are very rare examples where code doesn’t work in a later Julia (if relying on undocumented API), so except for that, it doesn’t matter if packages are no longer updated. They should work, but of course might have bugs that do not get fixed, then you could fork them.

An older system uses REQUIRE file, and it may also work, though maybe not, unless there’s alo a Project.toml file.

---

<div class="post-metadata">

**Author:** ![tbeason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tbeason/32/15898_2.png) [@tbeason](https://discourse.julialang.org/u/tbeason)\
**Post date:** [April 13, 2023, 6:34pm UTC](https://discourse.julialang.org/t/package-negligence/97434/4 "2023-04-13T18:34:26Z")

</div>

Can confirm package works on 1.9.0-rc2.

Note that DataFrame indexing has changed since the example on that README was written. You would use `X = map(Float64,convert(Array,cars[:,:Speed]))` instead, for example.

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [April 13, 2023, 6:40pm UTC](https://discourse.julialang.org/t/package-negligence/97434/5 "2023-04-13T18:40:27Z")

</div>

I’m not aware of any policy.

Perhaps 2 years isn’t too long a time for a package to go untouched - it might have been that good. But it’s perhaps something to investigate before you stake your business on it 🤔

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [April 13, 2023, 6:51pm UTC](https://discourse.julialang.org/t/package-negligence/97434/6 "2023-04-13T18:51:43Z")

</div>

There’s no policy as there can’t be one, and it’s not needed [EDIT: There might be a need for a policy to take over packages, for future development, but in this case the repo was changed quickly, and in some strict sense it wasn’t broken as is, never is.]. All Julia code that ever worked, should continue to work forever (or at least until Julia 2.0). If people abandon packages, there nothing to do, since you can’t force people to work on open source. And you can’t drop packages from the registry either, that would break things.

Even code from before Julia 1.0 should work, but then you likely need the exact Julia version it was made for. In general you might also need the same exact dependencies of your package. If the Project.toml file is incorrect that is, otherwise newer non-breaking version of dependencies are ok.

> [@tbeason](#):
>
> Note that DataFrame indexing has changed since the example on that README was written.

That seems to mean DataFrames.jl has a newer breaking version. In that case you need to figure out the version from that time that works, if the package manager doesn’t do it for you, as it should. [A Manifest.toml files is also for that situation, I believe.]

---

<div class="post-metadata">

**Author:** ![mihalybaci](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mihalybaci/32/13528_2.png) [@mihalybaci](https://discourse.julialang.org/u/mihalybaci)\
**Post date:** [April 13, 2023, 7:02pm UTC](https://discourse.julialang.org/t/package-negligence/97434/7 "2023-04-13T19:02:51Z")

</div>

I would say, think about the Heartbleed bug from years back. It wasn’t negligence, it was that [two developers](https://en.wikipedia.org/wiki/Heartbleed#Root_causes,_possible_lessons,_and_reactions) were responsible for code that basically the entire internet relied on for security. You get what you pay for in software. If no one is willing to pay to have someone maintain `SmoothingSplines.jl`, then why would they do it?

That’s not neglect, just a reality of people moving on to make a living.

---

<div class="post-metadata">

**Author:** ![Charles\_Brauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/charles_brauer/32/48688_2.png) [@Charles\_Brauer](https://discourse.julialang.org/u/Charles_Brauer)\
**Post date:** [April 13, 2023, 7:43pm UTC](https://discourse.julialang.org/t/package-negligence/97434/8 "2023-04-13T19:43:02Z")

</div>

Here is a screen shot of trying to run the SmoothingSpline,jl code that is on the GitHub page:

 ![test](https://global.discourse-cdn.com/julialang/original/3X/9/3/93523c22dcd35ea6ab34b653337b32d9ae8bae83.png)

As you can see, lines 9 and 10 show a problem.

---

<div class="post-metadata">

**Author:** ![kellertuer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kellertuer/32/220707_2.png) [@kellertuer](https://discourse.julialang.org/u/kellertuer)\
**Post date:** [April 13, 2023, 7:44pm UTC](https://discourse.julialang.org/t/package-negligence/97434/9 "2023-04-13T19:44:22Z")

</div>

Lines 9 and 10 are merely `possible call errors`, that might also be the linter being too strict.  
The actual error after `ERROR Undef` is the really interesting part 🙂

PS: Welcome to the Julia Forum! 👋

---

<div class="post-metadata">

**Author:** ![Charles\_Brauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/charles_brauer/32/48688_2.png) [@Charles\_Brauer](https://discourse.julialang.org/u/Charles_Brauer)\
**Post date:** [April 13, 2023, 7:44pm UTC](https://discourse.julialang.org/t/package-negligence/97434/10 "2023-04-13T19:44:30Z")

</div>

True. But I just became a Sponsor. Was that a mistake?

---

<div class="post-metadata">

**Author:** ![Charles\_Brauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/charles_brauer/32/48688_2.png) [@Charles\_Brauer](https://discourse.julialang.org/u/Charles_Brauer)\
**Post date:** [April 13, 2023, 7:47pm UTC](https://discourse.julialang.org/t/package-negligence/97434/11 "2023-04-13T19:47:27Z")

</div>

I’m running Windows 11. The latest release.

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [April 13, 2023, 7:50pm UTC](https://discourse.julialang.org/t/package-negligence/97434/12 "2023-04-13T19:50:00Z")

</div>

> [@Charles\_Brauer](#):
>
> it can no longer be compiled by Julia 1.8.5.

If you’re referring to (from the docs, a different error, not a compilation issue per se):

```julia
julia> X = map(Float64,convert(Array,cars[:Speed]))
ERROR: ArgumentError: syntax df[column] is not supported use df[!, column] instead

```

and what I got and:

> [@tbeason](#):
>
> use `X = map(Float64,convert(Array,cars[:,:Speed]))` instead

then it could solved alternatively by:

```julia
pkg> add DataFrames@v0.21.7

```

Why that version number? I just chose some radum one from approximately the time frame of that package… The point I’m making is that you CAN run old code… but yes, you’re in a rather impossible situation (as a new user). It’s not that the package strictly depended on the older pre-1.0 DataFrames.jl, only its docs did… but it could have done so. I could run the tests successfully for the package with (both the old and the new) DataFrames.jl installed:

```julia
pkg> test SmoothingSplines

```

Now, if the code of the package itself would have depended on DataFrames, it should have been mentioned in the Projects.toml file (and the code in the docs would have worked).

In statically compiled languages you would have high (not full) confidence the code worked at runtime. In Julia the tests are meant for that, but they are not always sufficient.

I suppose the problem in the screenshot is similar, and installing an older version of some package should help.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [April 13, 2023, 7:50pm UTC](https://discourse.julialang.org/t/package-negligence/97434/13 "2023-04-13T19:50:54Z")

</div>

For me it runs, just by fixing the notation of the dataframe, i. e, these lines:

```julia
X = map(Float64,convert(Array,cars[!,:Speed]))
Y = map(Float64,convert(Array,cars[!,:Dist]))

```

(add the `!,` there).

In fact, if you run that line by line in the REPL, you get a message explaining that change.

Thus, what is outdated there is the example in the README.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [April 13, 2023, 7:54pm UTC](https://discourse.julialang.org/t/package-negligence/97434/14 "2023-04-13T19:54:54Z")

</div>

> [@Palli](#):
>
> In statically compiled languages you would have high (not full) confidence the code worked at runtime. In Julia the tests are meant for that, but they are not always sufficient.
> 
> I suppose the problem in the screenshot is similar, and installing an older version of some package should help.

In this case it is simpler. The fix is just that the authors have to update the example in the README file. (ps: [PR created](https://github.com/nignatiadis/SmoothingSplines.jl/pull/27/commits/1dce010f0766914d762da399f455beac1d1a82e7))

---

<div class="post-metadata">

**Author:** ![Charles\_Brauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/charles_brauer/32/48688_2.png) [@Charles\_Brauer](https://discourse.julialang.org/u/Charles_Brauer)\
**Post date:** [April 13, 2023, 7:55pm UTC](https://discourse.julialang.org/t/package-negligence/97434/15 "2023-04-13T19:55:06Z")

</div>

Hmmmm… Well as a brand-new user, I can tell I have a lot of work to do. Silly me, I thought this would be easy.

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [April 13, 2023, 7:55pm UTC](https://discourse.julialang.org/t/package-negligence/97434/16 "2023-04-13T19:55:07Z")

</div>

For me the docs work (see my previous comment how, still the DataFrames version seems not to be the cause):

```julia
julia> predict(spl, 20.0)
59.82139857976935

```

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [April 13, 2023, 7:57pm UTC](https://discourse.julialang.org/t/package-negligence/97434/17 "2023-04-13T19:57:44Z")

</div>

Don’t worry, I’m sure you’ll face much harder problems than this one 😊 . Welcome to the forum!

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [April 13, 2023, 8:12pm UTC](https://discourse.julialang.org/t/package-negligence/97434/18 "2023-04-13T20:12:06Z")

</div>

> [@Charles\_Brauer](#):
>
> Silly me, I thought this would be easy.

It turned out to be because of DataFrames as I explained, and I wouldn’t say it was non-trivial for me as somewhat experienced with Julia (people give me way more credit than that, I wouldn’t claim Julia expert myself).

Note, as soon as you get any error, you want to look at the first error you get (this applies to any programming language), here for this line:

```julia
X = map(Float64,convert(Array,cars[:Speed]))

```

not start with the subsequent errors, that (here) all stem from it, e.g. not look at that (or last) error:

```julia
julia> predict(spl, 20.0) 
ERROR: UndefVarError: `spl` not defined

```

The fix is (relatively) easy, while the debugging the root cause (for new users) may not be… On the plus side, the Julia community is often helpful though.

To solve this for working with the latest DataFrame version, a PR to the package (docs) is needed as mentioned, but it also needs to be merged… and if the package is actually abandoned, then a policy of taking over may be needed(?). I would propose e.g. two years if enough for it to be justified by anyone taking over… The problem could happen for any arbitrary short time though. But even with other packages having braking changes (as can happen for other languages too), and spoiling things for other (older) packages, in practice, I want to stress there’s always a solution; at least having the same package environment (of dependencies).

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [April 13, 2023, 8:18pm UTC](https://discourse.julialang.org/t/package-negligence/97434/19 "2023-04-13T20:18:18Z")

</div>

> [@lmiq](#):
>
> ```julia
> X = map(Float64,convert(Array,cars[!,:Speed]))
> Y = map(Float64,convert(Array,cars[!,:Dist]))
> 
> ```

I did make a PR for this (I saw other PRs not yet merged, and actually, another user made the same PR just now…, and it was merged).

Neither of us can make the PR be merged, so it wouldn’t have been sufficient to fix the problem. Until then, and since the registry doesn’t point to either of our forks, it’s still useful to know you can refer to those forks (had this been a problem with the actual code of the package not just its docs), even after them outdated, now, this way:

```julia
pkg> add https://github.com/PallHaraldsson/SmoothingSplines.jl

```

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [April 13, 2023, 8:19pm UTC](https://discourse.julialang.org/t/package-negligence/97434/20 "2023-04-13T20:19:28Z")

</div>

Everything fixed, PR merged: [GitHub - nignatiadis/SmoothingSplines.jl: Cubic smoothing splines in Julia.](https://github.com/nignatiadis/SmoothingSplines.jl)

[Next page](https://discourse.julialang.org/t/package-negligence/97434.md?page=2)
