fiji / FlowJ

Plugins from Biomedical Imaging in Java (BIJ)
https://imagej.net/FlowJ
GNU General Public License v3.0
4 stars 2 forks source link

How to reconcile with sc.fiji:bij? #1

Closed ctrueden closed 4 years ago

ctrueden commented 4 years ago

I am in the process of fixing duplicate packages across different artifacts in Fiji and pom-scijava generally, and I came across sc.fiji:bij versus sc.fiji:FlowJ_. They are nearly identical, except:

  1. FlowJ now has a bunch of javadoc cleanup and fixed warnings (I probably did this some time ago)
  2. FlowJ has SurfaceJ_ and VolumeJ_ and Volume_Reconstructor_ classes and a plugins.config defining the FlowJ plugin (but not SurfaceJ or VolumeJ).
  3. FlowJ is missing several bij packages including bijfit, io, knn, numericalMethods, and registration.

@tinevez My question is: how should we proceed? We need to eliminate duplicate packages, which in this case include bijnum, FlowJ, VolumeJ, and volume. We could:

What should we do?

Finally, for proper Jigsaw modularization in the future, we also won't want to leave multiple base packages in the same JAR file. But I'm not certain we will ever Jigsaw-modularize these old Fiji plugins, so may not be worth worrying about that too much yet.

tinevez commented 4 years ago

What about we retire FlowJ from Fiji?

tinevez commented 4 years ago

Bon I don't think retiring it is a good idea. I am not aware of sc.fiji:bij. What is it?

ctrueden commented 4 years ago

@tinevez OK, so in late 2013, Johannes Mavenized+GitHubified Michael Abramoff's bij library for the Fiji Cookbook, since it was part of the WCIF/MBF ImageJ collection, and were trying to make (much of) that collection available from Fiji with that project. But before that in 2009, you added FlowJ (part of bij!) to Fiji, including many of the same classes. And somehow this duplication went mostly unnoticed until now.

Fortunately, the code hasn't diverged too much:

To reconcile things, here is what I'm going to do:

  1. Migrate 65276312fb2eec4c1678a19c226fb19f2d5aaacb to fiji/bij.
  2. Delete all bij code from FlowJ, and make FlowJ depend on bij.
  3. Keep the bij plugins in unnamed package, together with the plugins.config, in FlowJ.

In this way, people who want the library without the IJ1 plugins can use sc.fiji:bij, and people who want FlowJ et al. can use sc.fiji:FlowJ_.

This solution is not perfect; it's a bit weird that the artifact called FlowJ_ will also include VolumeJ_, SurfaceJ_ and Volume_Reconstructor_. But it's forward progress, without distrupting the existing dependency structure.

ctrueden commented 4 years ago

There is another problem: a legal one. For years we have shipped FlowJ with Fiji purportedly as GPL, but there is no documented permission (e.g. here) from Michael Abramoff to do this. The license blurb included in many bij classes is:

Permission to use, copy, modify and distribute this version of this software or any parts of it and its documentation or any parts of it ("the software"), for any purpose is hereby granted, provided that the above copyright notice and this permission notice appear intact in all copies of the software and that you do not sell the software, or include the software in a commercial package. The release of this software into the public domain does not imply any obligation on the part of the author to release future versions into the public domain. The author is free to make upgraded or improved versions of the software available for a fee or commercially only. Commercial licensing of the software is available by contacting the author. THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

In other words: non-commercial-only, incompatible with GPL.

I am now leaning toward removing the bij plugins from Fiji, as you suggested. I will make a topic on image.sc about it before doing so.

tinevez commented 4 years ago

Wait, I have permission from Michael. Just let me find this email.

tinevez commented 4 years ago

Zut, I only have a reference to the discussion, but not the email anymore. I guess it is sleeping on MPI_CBG account. Here is the transcript from the discussion I had with Johannes Schindelin about this matter:

On Mon, Aug 8, 2011 at 2:09 PM, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> Hi J-Y,
>
> another thing: you listed yourself as maintainer of FlowJ; have you talked
> to Michael Abramoff? Is he no longer interested?
>
> I ask because I have a bug fix and an enhancement on the 'flowj-magnitude'
> branch...

Hi Johannes

Yes, I have talks to Michael a while ago.
His career has moved on a lot, and he no longer develops nor support FlowJ. We actually have a version with plenty of debug codes and some methods that are not supported. 

He is ok for us to modify the code, as long as we still link to the original project page, like it is done in the wiki.

On top of that, I need to mention that there is a serious memory bug in FlowJ: The memory it uses is not freed after calculation, and you will run into a serious blockage for large time-lapse movies. 
I could not find a solution to that, and instead started workin on FlowMate, optic flows in ImgLib. Yeah ok I need to finish TrackMate before doing anything elese. Christ it's been more than a year....

Cheers
jy
ctrueden commented 4 years ago

Oh! I just wrote him a private email asking for permission again. Hopefully he still responds, and we can stop worrying about this issue.

ctrueden commented 4 years ago

He gave permission to relicense the code!

From: Curtis Rueden Date: Thu, May 7, 2020 at 4:41 PM Subject: Relicensing BIJ with an open source license? To: Michael Abramoff

Hi Michael,

I'm writing to ask if you would be willing to relicense your old "Biomedical Imaging in Java" (BIJ) project under a GPL-compatible open-source license -- either a permissive one such as BSD-2, or a copyleft one such as GPLv3.

We have distributed BIJ code with the Fiji project for many years (see https://github.com/fiji/FlowJ and https://github.com/fiji/bij), but I do not know whether you ever gave permission for us to do this.

Therefore, I'm seeking your blessing now. If you are willing to allow the relicensing, we can keep distributing FlowJ et al. with Fiji. Otherwise, for legal reasons we would need to remove BIJ from the distribution.

How should we proceed?

Regards, Curtis

From: Michael Abramoff Date: Thu, May 7, 2020 at 4:45 PM Subject: Re: [External] Relicensing BIJ with an open source license? To: Curtis Rueden

Absolutely that is fine. Please go ahead.

ctrueden commented 4 years ago

Everything is reconciled! And sc.fiji:bij:1.0.0 + sc.fiji:FlowJ_:2.0.0 have been released. I will now update pom-scijava accordingly.