# FemtoCleaner and Deprecations upgrade

**URL:** <https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561>\
**Category:** General Usage\
**Tags:** package\
**Created:** [August 14, 2019, 10:30pm UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561 "2019-08-14T22:30:10Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Amin\_Yahyaabadi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amin_yahyaabadi/32/9826_2.png) [@Amin\_Yahyaabadi](https://discourse.julialang.org/u/Amin_Yahyaabadi)\
**Post date:** [August 14, 2019, 10:30pm UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/1 "2019-08-14T22:30:10Z")

</div>

**This is important** : there are many packages that are written in Julia 0.4, 0.5, 0.6, etc and are abandoned/unmaintained. One solution to help these packages revive is to use FemtoCleaner to removed deprecated syntax.

Now, FemtoCleaner does not work for online repositories ([https://github.com/JuliaComputing/FemtoCleaner.jl/issues/113](https://github.com/JuliaComputing/FemtoCleaner.jl/issues/113))

I created a Readme update pull request ([https://github.com/JuliaComputing/FemtoCleaner.jl/pull/112](https://github.com/JuliaComputing/FemtoCleaner.jl/pull/112)) 2 months ago which allows running FemtoCleaner offline using Julia 0.6.4. The developers have abandoned this project and my pull request has remained open!

Based on reports, people still have difficulty using my pull request.

I have created PRs for FemtoCleaner and Deprecations that updates some of their syntaxes:  
[https://github.com/JuliaComputing/FemtoCleaner.jl/pull/114](https://github.com/JuliaComputing/FemtoCleaner.jl/pull/114)  
[https://github.com/JuliaComputing/Deprecations.jl/pull/91](https://github.com/JuliaComputing/Deprecations.jl/pull/91)

I wanted to ask developers to help revive FemtoCleaner. Ideally, running that on latest Julia.

**We need to make all those abandoned packages useful again.** :

This simple search brings me more than **5000 repositories** that they were lastly updated in 2017.  
[https://github.com/search?q=language%3AJulia%20updated%3A2018-01-01&type=Repositories](https://github.com/search?q=language%3AJulia%20updated%3A2018-01-01&type=Repositories)

---

<div class="post-metadata">

**Author:** ![Amin\_Yahyaabadi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amin_yahyaabadi/32/9826_2.png) [@Amin\_Yahyaabadi](https://discourse.julialang.org/u/Amin_Yahyaabadi)\
**Post date:** [August 15, 2019, 4:17am UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/2 "2019-08-15T04:17:29Z")

</div>

Apparently, Deprecations.jl can’t be used to update Julia 0.6 → 0.7 deprecations. And, in Deprecations.jl in CSUtilities, the developers have used some weird syntax for iterating (start, next, done) which is very hard to understand.  
I think I can’t help much. This means any package which used Julia \<0.7 specific syntax is dead and unusable. That’s why developers didn’t/couldn’t update Deprecations and FemtoCleaner.

---

<div class="post-metadata">

**Author:** ![bernhard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bernhard/32/2619_2.png) [@bernhard](https://discourse.julialang.org/u/bernhard)\
**Post date:** [August 15, 2019, 4:52am UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/3 "2019-08-15T04:52:43Z")

</div>

Have you seen this explanation about iterations? It may provide some insights.

> **[Writing Iterators in Julia 0.7](https://julialang.org/blog/2018/07/iterators-in-julia-0.7/)**
>
> Writing Iterators in Julia 0.7 | This post originally appeared on the Invenia blog....

---

<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:** [August 15, 2019, 9:14am UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/4 "2019-08-15T09:14:01Z")

</div>

While FemtoCleaner is (was?) a nice tool, updating old code is just a bit more time consuming, but not infeasible, without it.

FWIW, I think that for most cases, a complete rewrite/refactor is preferable to updating from 0.4, as the language changed so much since (0.5 is borderline, but I would go for a rewrite in any case). This should be easy if the package has tests, and when it doesn’t, this signals code quality issues that make a clean slate reimplementation preferable.

---

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [August 16, 2019, 1:45am UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/5 "2019-08-16T01:45:02Z")

</div>

> [@Tamas\_Papp](#):
>
> While FemtoCleaner is (was?) a nice tool, updating old code is just a bit more time consuming, but not infeasible, without it.

True, and the availability of v0.7 as a transition makes it even easier. I wonder a bit about this need to revive old projects - if they haven’t been updated, it suggests to me that they’re not needed or that the effort to accomplish the same thing had gone elsewhere.

That said, if you put in the effort to make the changes and the owner of the repo has abandoned it and won’t merge, that’s really unfortunate. I feel like I’ve seen discussions about what to do with orphaned projects w/r/t the registry, but you can always fork it and call it `Great Package2` and register that.

---

<div class="post-metadata">

**Author:** ![Amin\_Yahyaabadi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amin_yahyaabadi/32/9826_2.png) [@Amin\_Yahyaabadi](https://discourse.julialang.org/u/Amin_Yahyaabadi)\
**Post date:** [August 16, 2019, 3:05am UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/6 "2019-08-16T03:05:54Z")

</div>

> I wonder a bit about this need to revive old projects - if they haven’t been updated, it suggests to me that they’re not needed or that the effort to accomplish the same thing had gone elsewhere.

This is not true. Julia has changed a lot just in 2-3 Years! It is not like 10 years ago that we deprecated Julia \<0.7 Syntax.

Also, Julia users are not that active in the application part (compared to Python and Matlab). There are many packages that did one specific task in the past for that developer. And after some time now some other developer needs some functionality.

This simple search brings me more than **5000 repositories** that they were lastly updated until 2017.  
[https://github.com/search?q=language%3AJulia%20updated%3A2018-01-01&type=Repositories](https://github.com/search?q=language%3AJulia%20updated%3A2018-01-01&type=Repositories)

---

<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:** [August 16, 2019, 6:37am UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/7 "2019-08-16T06:37:08Z")

</div>

> [@kevbonham](#):
>
> you can always fork it and call it `Great Package2` and register that.

I would be great if there was a procedure for recycling the name for the fork of abandoned projects.

Eg an example proposal:

1. if a major Julia version has been released for at least 2 years and a registered package for a former version has not been updated,
2. an issue can be opened on the General registry, cc’ing the original developer
3. who can signal interest in keeping the name; if this does not happen, the package name passes to the fork (with a new UUID of course) after a 1-month waiting period (which can be skipped if the source repo is no longer available)

---

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [August 16, 2019, 11:03am UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/8 "2019-08-16T11:03:57Z")

</div>

> [@Tamas\_Papp](#):
>
> Eg an example proposal

I’ve seen numerous proposals / discussions of this sort, but can’t find any just now. I could have sworn not all of them took place on slack…

I think this is sensible, but might even make the timeline a bit quicker.

> [@Amin\_Yahyaabadi](#):
>
> There are many packages that did one specific task in the past for that developer. And after some time now some other developer needs some functionality.

Right. And that new developer may need to do the work to get it up to the newest version. Bless them for putting in the effort!

> [@Amin\_Yahyaabadi](#):
>
> This simple search brings me more than **5000 repositories** that they were lastly updated until 2017

This is why I’m concerned about willy-nilly saying “let’s upgrade all the repos!” 5000 upgrade projects is A LOT for a volunteer brigade of coders.

And given that the slow pace of questions here and on slack asking for an old unmaintained project to get upgraded, it seems likely to me a good number of those packages aren’t needed/won’t be used, meaning that a decent chunk of that effort would be wasted.

That said, I’m not arguing against your original idea that FemtoCleaner and Deprecations get upgraded/maintained - that seems like a great idea. Since effort there can potentially scale to however many unmaintained projects actually are needed by future developers.

An additional proposal might be some way of alerting potential users of unmaintained projects that these tools exist and how to use them, but I can’t think of a good mechanism to do this, other than just telling them when they inevitably ask. Then again, as I said, the pace of this sort of thing seems slow enough that this might be the best mechanism.

---

<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:** [August 16, 2019, 11:32am UTC](https://discourse.julialang.org/t/femtocleaner-and-deprecations-upgrade/27561/9 "2019-08-16T11:32:36Z")

</div>

> [@kevbonham](#):
>
> This is why I’m concerned about willy-nilly saying “let’s upgrade all the repos!” 5000 upgrade projects is A LOT for a volunteer brigade of coders.

If a repository is otherwise abandoned, making it run on a recent Julia version accomplishes little _per se_ — without maintainers, there is still no one to merge PRs or fix bugs.

In most cases, the best one can do for abandoned software is either take on maintenance, or retire it gracefully. The registry should just facilitate both options.
