JSHint: Dug In
This is the second essay in a four-part series about relicensing the JSHint software project.
In a previous essay, I explained what made the JSHint project’s bizarre license so toxic for JSHint and its users. However, a fully free and well-maintained alternative (namely ESLint) has been available for many years. A wider perspective may make the plight of the JSHint project less compelling.
“Geez, just use another project,” you might be thinking.
It’s true that I could have deprecated the project. That would amount to hanging a “CONDEMNED” sign on the door of an old factory. People could still wander in and mess with the equipment–they’d just be on their own when things inevitably went haywire.
There are a few reasons why I stuck with the relicensing despite its growing obscurity.
Changing between similar tools isn’t necessarily easy, and not everyone can jump ship. There are plenty of people who have made technical investments in JSHint and who lack the time to migrate to some other tool. Deprecating JSHint would be abandoning those folks. To be sure, both the MIT Expat and the JSON license explicitly deny “warranty of any kind,” but I still felt a certain obligation to all the people who had come to rely on the project.
Maybe it’s because JSHint is itself the victim of such a failed relationship. Long ago, its creator decided to focus on issues of code correctness, and he endorsed JSCS as the tool for folks who wanted to enforce more subjective “stylistic” rules. This worked for a time, but JSCS eventually merged with the ESLint project. The merge was undoubtedly beneficial for the users and maintainers of both of those projects. Unfortunately for JSHint, it also hollowed out our endorsement of JSCS.
Like a mule
It’s tempting to posture as the selfless open source maintainer, long suffering in the service of “the community.” That framing overstates my selflessness and understates the challenge. If I was focused only on relicensing, then the decline in relevance would have been discouraging enough. The disappointment was more pronounced because all the while, I was also responding to bug reports, handling support requests, and implementing new features. Frankly, an unspoken commitment to strangers wasn’t strong enough to sustain the effort.
When I first contributed to JSHint, I was still internalizing the ethics of free software. I may have even written my first patch on Windows. I don’t know; it was a confusing phase. My involvement in JSHint grew in parallel to my commitment to free software. Those two trends are inherently oppositional, and I increasingly felt regret about the way I was spending my time.
Ultimately, it was stubbornness that kept me going. I wanted to move on, but that would mean all of my work had been in service of yet another non-free system. I didn’t want the result of my effort to be a project I couldn’t endorse.