5 min read

Last week, one of the npm open source authors and maintainers, software developer Feross announced an “npm install funding” experiment. Essentially, this enabled sponsors to “advertise on the Npm package install terminals”. In turn, the money raised from these ads would ensure npm maintainers are paid for their important contributions to the project, ensuring that packages remain up to date, reliable, and secure.

Feross wrote on the GitHub page, “I think that the current model of sustaining open source is not working and we need more experimentation. This is one such experiment.”

He further wrote that if this experiment works, then they can help make all open source healthier, too. For complex reasons, companies are generally hesitant or unwilling to fund OSS directly. When it does happen, it’s never enough and it never reaches packages which have transitive dependencies (i.e. packages that no one installs explicitly and therefore no one knows exists). Feross believes that npm essentially is a public good as it is consumed by huge numbers of users, but no one pays for it. And he viewed a funding model that usually works for public goods like this are ads. But how does it work?

Read Also: Surprise NPM layoffs raise questions about the company culture

How was the project ‘Npm install funding’ planned to work?

Feross’s idea was that when developers install the library via the npm JavaScript package manager, they get a giant banner advertisement in their terminal as shown below:

Source: GitHub thread

Feross asked companies to promote ads on the installation terminals of JavaScript packages that have expressed interest in participating in the funding experiment. The idea behind funding is that companies buy ad space in people’s terminals, and the funding project then shares its profits with open-source projects who signed-up to show the ads, as per ZDNet. Linode and LogRocket agreed to participate in this funding experiment. The experiment did run on a few open source projects that Feross maintains: One of them was StandardJS 14.

Feross raised $2000 as Npm install funds

Feross had so far earned $2,000 for his time to release Standard 14 which took him five days. If he was able to raise additional funds, his next focus was the TypeScript support in StandardJS (one of the most common feature requests) and modernizing the various text editor plugins (many of which are currently unmaintained).

Community did not support promoting ads on CLI and finally it came to a halt

As per ZDNet reports, the developer community has been debating on this idea. There are arguments from both sides, one who see it is a good idea to finance their projects. And there are others who are completely against seeing ads on their terminals.

Most of the negative comments for this new funding scheme came from developers who are dissatisfied that these post-install ad banners will now be making their way into logs, making app debugging unnecessarily complicated.

Robert Hafner, a developer from California commented on a GitHub thread, “I don’t want to have to view advertisements in my CI logs, and I hate what this would mean if other packages started doing this. Some JS packages have dozens, hundreds, or even more dependencies- can you imagine what it would look like if every package did this?”

Some of the developers took a step further and created the world’s first ad blocker for a command line interface.

You need to re-evaluate your partnership @linode @LogRocket If I see either of your ads in my terminal your service is going right to my adblocker. https://t.co/ko1sX8m9TT — Troy (@dawnerd) August 24, 2019

They also put pressure on Linode and LogRocket to remove showing up the ads, and Linode eventually decide to drop out.

We hear you loud and clear. We've reconsidered and have removed the ad. — Linode (@linode) August 25, 2019

Additionally on Hacker News, users are confused about this initiative. They are curious to know about how this will actually work out?

One of them commented, “The sponsorship pays directly for maintainer time. That is, writing new features, fixing bugs, answering user questions, and improving documentation.

As far as I can tell, this project is literally just a 200 line configuration file for a linter. Not even editor integrations for the linter, just a configuration file for it.

Is it truly something that requires funding to ‘add new features’? How much time does it take out of your day to add a new line of JSON to a configuration file, or is the sponsorship there to pay for all the bikeshedding that’s probably happening in the issues and comments on the project?

What sort of bugs are there in a linter configuration file?

I’m really confused by all of this.

> The funds raised so far ($2,000) have paid for Feross’s time to release Standard 14 which has taken around five days.

Five days to do what? Five full 8 hour days? Does it take 5 days to cut a GitHub release and push it to NPM? What about the other contributors that give up their time for free, are their contributions worthless?

Rather than feeling like a way to support FOSS developers or FOSS projects, it feels like a rather backhanded attempt at monetization by the maintainer where Standard was picked out because it was his most popular project, and therefore would return the greatest advertising revenue.

Do JavaScript developers, or people that use this project, have a more nuanced opinion than me? I do zero web development, is this type of stuff normal?”

After continuous backlash from developer community, the project has come to a halt and there are no messages promoted on the CLI. It is clear that while open-source funding still remains a major pain point for developers and maintainers, people don’t really like ads in their CLI terminals.

What’s new in tech this week!

“Rust is the future of systems programming, C is the new Assembly”: Intel principal engineer, Josh Triplett

Kotlin 1.3.50 released with ‘duration and time Measurement’ API preview, Dukat for npm dependencies, and much more!

React.js: why you should learn the front end JavaScript library and how to get started