| FAQ - Why sparse? | |
| Q. Why not just use gcc? | |
| A. Gcc is big, complex, and the gcc maintainers are not interested in | |
| other uses of the gcc front-end. In fact, gcc has explicitly | |
| resisted splitting up the front and back ends and having some common | |
| intermediate language because of religious license issues - you can | |
| have multiple front ends and back ends, but they all have to be part | |
| of gcc and licensed under the GPL. | |
| This all (in my opinion) makes gcc development harder than it should | |
| be, and makes the end result very ungainly. With "sparse", the | |
| front-end is very explicitly separated into its own independent | |
| project, and is totally independent from the users. I don't want to | |
| know what you do in the back-end, because I don't think I _should_ | |
| know or care. | |
| Q. Why not GPL? | |
| A. See the previous question: I personally think that the front end | |
| must be a totally separate project from the back end: any other | |
| approach just leads to insanity. However, at the same time clearly | |
| we cannot write intermediate files etc crud (since then the back end | |
| would have to re-parse the whole thing and would have to have its | |
| own front end and just do a lot of things that do not make any sense | |
| from a technical standpoint). | |
| I like the GPL, but as rms says, "Linus is just an engineer". I | |
| refuse to use a license if that license causes bad engineering | |
| decisions. I want the front-end to be considered a separate | |
| project, yet the GPL considers the required linking to make the | |
| combined thing a derived work. Which is against the whole point | |
| of 'sparse'. | |
| I'm not interested in code generation. I'm not interested in what | |
| other people do with their back-ends. I _am_ interested in making a | |
| good front-end, and "good" means that people find it usable. And | |
| they shouldn't be scared away by politics or licenses. If they want | |
| to make their back-end be BSD/MIT licensed, that's great. And if | |
| they want to have a proprietary back-end, that's ok by me too. It's | |
| their loss, not mine. | |
| Q. Does it really parse C? | |
| A. Yeah, well... It parses a fairly complete subset of "extended C" as | |
| defined by gcc. HOWEVER, since I don't believe in K&R syntax for | |
| function declarations or in giving automatic integer types, it | |
| doesn't do that. If you don't give types to your variables, they | |
| won't have any types, and you can't use them. | |
| Similarly, it will be very unhappy about undeclared functions, | |
| rather than just assuming they have type "int". | |
| Note that a large rationale for me doing this project is for type | |
| following, which to some degree explains why the thing is type-anal | |
| and refuses to touch the old-style pre-ANSI non-typed (or weakly | |
| typed) constructs. Maybe somebody else who is working on projects | |
| where pre-ANSI C makes sense might be more inclined to care about | |
| ancient C. It's open source, after all. Go wild. | |
| Q. What other sparse resources are available? | |
| A. Wiki: http://sparse.wiki.kernel.org/index.php/Main_Page | |
| Mailing list: linux-sparse@vger.kernel.org | |
| See http://vger.kernel.org/vger-lists.html#linux-sparse for subscription | |
| instructions and links to archives | |
| Git repo: git://git.kernel.org/pub/scm/devel/sparse/sparse.git | |
| gitweb: http://git.kernel.org/?p=devel/sparse/sparse.git |