Alan Shimel Should Stop Talking About Snort’s Licensing.
Thomas Ptacek | May 11th, 2007 | Filed Under: Industry Punditry, Uncategorized
Somewhere in a hypothetical world, where the streets are paved with taco shells and birds poop garnets onto unsuspecting passers-by, there’s a coder working on a brand new, non-buffering SMB/DCE/CIFS decode engine for Snort. She’s part of a team planning to build an open-source Windows desktop firewall product, under the terms of the GPL. This hypothetical person, who has halogen desk lamp bulbs instead of eyeballs, has standing to complain about licensing changes in Snort.
She wrote a really kick ass blog post about her concerns, but we can’t read it. We live in our world, where birds poop bird poop. But even in our world, there are people who feel they have cause to complain when SourceFire amends their license text. The difference is, in our world, those people aren’t open-source developers; instead, they’re companies that repackage GPL Snort and sell it for over $20,000 a pop [*]. I don’t know what they have instead of eyeballs.
Some context.
Snort is the most successful GPL security product ever produced. What does GPL mean? It’s pretty simple: you can download the source code to Snort for free and you can sell it to other people. What’s the catch? You have to publish your code, too. Any programs you publish that even touch Snort have to be GPL’d. The GPL “infects” code. That’s good, because it produces more open source code.
It’s worth restating: the only obligation the GPL imposes on a vendor who uses Snort is to publish their source code. The GPL does not mean you have to pay SourceFire to use Snort in your product.
Here’s a dirty secret of the industry: a lot of security vendors use Snort, as a kind of “instant IPS” product. There are tens of products that claim to block attacks coming over the network. No exaggeration: most of them probably exploit Snort.
This is not really a problem. You’re happy they do, because if they had to build that engine themselves, they’d screw it up. Marty screwed it up repeatedly while building Snort, and Marty’s leads a pretty smart team. People re-using Snort is good for the industry.
But there is a problem. Many of the companies re-using Snort aren’t honoring the license.
The GPL requires these companies to publish their source code. Not just the source code to Snort —- Marty does a fine job of publishing that code himself. They’re not allowed to keep their own code secret.
This is a good thing. Snort starts the open-source ball rolling. In exchange for being able to take an IPS product to market in 3 months instead of 24, other vendors keep it rolling. The community gets more and more open source security code to play with.
Companies that don’t do this are cheating.
It gets worse. Some of these companies compete directly with SourceFire. Sales of their products into SourceFire prospects make it harder for SourceFire to sell Snort. SourceFire makes less money, and has fewer resources to dedicate to Snort. All because these other companies, who don’t fund Snort, take Snort and sell it themselves.
Here is one totally fair reaction to this problem: revoke the GPL from future releases of Snort, and move to a proprietary license that forbids derivative products. It’s been done before. It sucks for all of us, because we lose the freedoms the GPL guarantees. But it saves developers from being strangled by their own code.
That’s not what SourceFire did. Instead, SourceFire simply reminded the community what the GPL means. Products derived from Snort are themselves GPL’d, whether the authors like it or not. What does “derived” mean? SourceFire says, you’re “derived” from Snort if your product:
Integrates source code from Snort. For example, by fishing out and repurposing the Snort TCP reassembly engine or the Microsoft CIFS/SMB decode.
Includes Snort copyrighted data files. For example, by using Snort’s signature database with your own intrusion detection engine.
Integrates/includes/aggregates Snort into a proprietary executable installer, such as those produced by InstallShield. For example, by creating a desktop IPS product that relied on Snort.
Links to a library or executes a program that does any of the above where the linked output is not available under the GPL. For example, by fishing out and repurposing the Snort TCP reassembly engine into a new program, itself GPL’d, and then using that program as the engine for a third proprietary product.
There is nothing controversial about this definition. To put it into context, replace “Snort” with “MySQL”, and ask if you can:
Embed MySQL into a commercial Microsoft Access clone which is not itself GPL’d.
Copy MySQL’s SQL documentation into the help text for that commercial Access clone.
Quietly install MySQL alongside your commercial Microsoft Access clone when you run its installer.
Use the “mysql” command line console to communicate with MySQL when users type queries into your commercial Microsoft Access clone, so as to avoid “embedding” MySQL.
Apparently, this stuff is not well understood to Alan Shimel of StillSecure. Alan claims that SourceFire’s “clarification” changes the GPL. He claims that if he wanted, he could “fork” the Snort project, from the last release under the “original” license, and ignore SourceFire’s definition of “derivative works”. I claim that Alan is smoking something strange. The meaning of the GPL is clear.
Alan links to an article that attempts to “clarify” this subject. This article is crazy talk. It says, in part,
2) The meaning of derivative work will not be broadened to include software created by linking to library programs that were designed and intended to be used as library programs. When a company releases a scientific subroutine library, or a library of objects, for example, people who merely use the library, unmodified, perhaps without even looking at the source code, are not thereby creating derivative works of the library.
This directly contradicts the GPL. You cannot take a GPL’d library and “call into it” from non-GPL’d code. This is so well understood that there’s even a whole seperate license, the “Lesser” GPL (LGPL), that specifically allows you to link your code to an LGPL’d library without falling under the terms of the GPL. Lots of very important libraries, like “readline”, famously refuse to use the LGPL. You can’t use them in non-GPL’d code. If this wasn’t the case, Sleepycat, the authors of Berkeley DB, would have had no company, and Oracle certainly wouldn’t have paid tens of millions of dollars for them.
Why am I pointing this out? To be honest, I’m not sure. If StillSecure has modified Snort, or built code that links to Snort, or that executes Snort, and they haven’t GPL’d and published all of that code, StillSecure is violating SourceFire’s copyright and it liable for damages. SourceFire doesn’t need me to point this out. They have a legal department.
I think what it is is, this pisses me off. Set aside the license for a second. Building a commercial product that uses Snort as its engine and not compensating SourceFire or the community is unethical. If you build on Snort, pay SourceFire, or GPL your code, so you’re giving back to the community you’re taking from.
[∗]
Where does $20k+ come from? For starters, take the maintenance price of the box and divide by 15%.
[Update 4:10EST]
A commenter rightly points out the fork-and-exec exception in the GPL: linking to Snort code is covered by the GPL, but simply executing Snort or one of its programs isn’t.


Add New Comment
Viewing 29 Comments
Thanks. Your comment is awaiting approval by a moderator.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Add New Comment
Trackbacks