« On Going Dark | Main | On Preparing for Releasing Insubstantial (Codename Invincible) »

On Forking Substance

Most people think of fun things to do on their three day weekends. Things like getting a babysitter and seeing a movie with your spouse, going to a birthday party, getting some car maintenance done, or taking the kids to the playgrond. Me? I spent this weekend forking an existing open source project.

The particular project I forked was six different code bases from Kirill Grouchnikov relating to the Flamingo Widget Library and the Substance Look and Feel. However, there was no drama like what went on with Hudson and Jenkins. Kirill (the principal and basically sole developer) instead has decided to end his support for the project. Something about Android having a better growth potential and that his work on the Android Market paying his rent/mortgage I’m sure. He seems pretty determined about this, because he has even rejected some pull requests for some very specific null pointer checks. In his response he has practically asked that the project be forked, so I am testing the waters.

There are a few things to consider when one is forking a project. The first is the the license terms. Kirill licensed his projects under the 3-clause BSD license . This license allows forking with basically two restrictions (my understanding in layman’s terms, I am not a lawyer though I play one when reading GrokLaw): (a) credit where credit is due and (b) pick a new name. So I’ve come up with some names for my forks of the projects.

Trident
Halberd – another middle ages weapon with three sharp points, just configured differently.
Substance
Insubstantial – A play on substance. Really the UI widgets should be insubstantial and fall away leaving only the data and user interaction.
Flamigno
Peacock – Another colorful bird.
laf-(widget|plugin)
plaf-(widget|plugin) – I’m just being lazy here. (Pluggable) Look and Feel.

The next question is releases and maintenance plan. For now I am synchronizing all of the release numbers to 6.2. There are some null pointer fixes in the forks for substance, flamingo, and plaf-widget. I intend to only do bug fixes and minor alterations for this release. Any new features will wind up in a 7.0 release. At my day job we have code for rounded window pane corners. If that winds up in a public repository it will be in the 7.0 release, these are the sorts of feature adds that are not going into bug fix releases.

Next this fork gives me a chance to do other tweaks that match my whims. For my day job we have a need to see these libraries in a Maven repo, so to that end I have migrated the build system to Gradle, am building the git repo on a CloudBees instance, and I have a Sonatype account to post the libs on their OSS repository. Details and experiences will be in another blog post.

The other tweak has to do with the infamous EDT checks Kirill installed into Substance. I have decided to add system properties to control the logging of the errors and the throwing of exceptions separately. By default violations will be logged to System.err, but no exception will be thrown. You’re free toggle either one of them (insubstantial.checkEDT and insubstantial.logEDT as Booleans). I was going to leave them both turned on, until I discovered that Kirill’s own unit tests for Flamingo violate the rules. The whole EDT issue is worthy of its own blog post/diatribe.

For those who are interested, the maven repository groupId is com.github.insubstantial. The code is at https://github.com/Insubstantial. I have this set up as a group at github. So patches are welcome, and so are collaborators.

Comments (8)

The irony of the first paragraph is that I did all of those things, it wasn't a mutually exclusive list.

So glad to hear about this. I worked with sonatype to get the following artifacts for Substance 6.0 in Maven Central:

http://repo2.maven.org/maven2/net/java/dev/laf-plugin/laf-plugin/1.1/laf-plugin-1.1.pom

http://repo2.maven.org/maven2/net/java/dev/laf-widget/laf-widget/5.0/laf-widget-5.0.pom

http://repo2.maven.org/maven2/org/pushing-pixels/trident/1.2/trident-1.2.pom

http://repo2.maven.org/maven2/org/java/net/substance/substance/6.0/substance-6.0.pom

I just used maven - I don't know much about gradle. In any
case, best wishes and I hope to see your artifacts soon !

Rob

carsten:

Thank you! Substance has been without support for way to long.

Tbee:

Great news! I've evaluated substance for a project again last Wednesday and I discarded it for one reason again; the skins do not have enough contrast. However changing that is very difficult. So for 7.0 that would be a great improvement; customizing the skins...

Bubak:

You can use 'Substance' name WITH AUTHORS PERMISSION. So just ask him, most authors does not have problem with it.

Miguel Garcia:

Thanks so much for the initiative! I've used Substance-* stuff in the past in some of my projects and users really liked the interfaces. Please do not hesitate to contact me if you'd like some help on the forking, I'll be glad to help.

@Bubak - no need to shout. I know I can re-use project names with the authors permission, and most authors don't have a problem with it. But the names are halberd, insubstantial, and peacock. Go do the math, you'll figure it out.

Adam:

Great stuff Danno, It's nice to see substance being a little more lenient even if you do have to admit your folly first :)

I think warn rather than crash really is much better.

Post a comment


About

This page contains a single entry from the blog posted on February 21, 2011 9:28 PM.

The previous post in this blog was On Going Dark.

The next post in this blog is On Preparing for Releasing Insubstantial (Codename Invincible).

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.33