Stuff we've discussed on IRC.
Posted by ats at 2006-08-11 11:24
This is a library which does something with SVG and OpenGL.
It's also the worst example of Unix software packaging I've seen in a long time.
Its sins include:
- It's licensed under the QPL. (This is bad not because the QPL is an inherently bad license, but because it's not compatible with other common licenses without exception clauses -- so some of the example applications the web page points to aren't legally distributable.)
- The download site requires you to accept the license before downloading.
- The download site doesn't give you a link to the tarball.
- The tarball has a non-standard name.
- The tarball extracts to a non-standard directory name that's different from the tarball name.
- It uses qmake (which is, like all build systems that aren't automake, incredibly crappy) for configuration.
- Configuration is done partly through environment variables and partly through editing a config file.
- The install instructions say that you have to bodge LD_LIBRARY_PATH while it's building.
- The Makefile that the configuration step invokes make recursively on subdirectories (bad, but most software does it) and explicitly ignores the exit code, so the build will never fail (really stupid).
- It includes a private copy of libjpeg (nevermind that it depends on Qt which also includes one).
- ... and zlib.
- ... and libpng.
- ... and freetype2.
- ... the first three of which have had major security holes in the past, and the last of which is widely patched by distributions to fix rendering bugs.
- It invokes gcc with the -pipe option. This isn't faster on most modern machines.
- It generates lots of strict-aliasing warnings, and the option to disable strict aliasing isn't given to GCC (i.e. the authors either haven't built it with a GCC less than two years old, or they don't care about warnings).
- It blindly invokes gcc with the -fPIC option. On many architectures (x86 is one), the only effect of this is to generate larger, slower code.
- It has a configuration option for whether it should use floats or doubles internally. The only other package I'm aware of that does this is fftw, and it makes it a right pain to package because you have to build and install both versions (as applications that expect both exist).
- The tarball is missing setting.conf files, so the build instructions don't actually work.
- The vectorizer example fails to build because of a trivial mistake in the code (extra classname qualifier in a method header).
- The source code has mixed CR and CRLF line endings -- with some files containing both!
- The way it invokes make recursively means that "make -n" doesn't work.
- The install rules don't do anything, and following the instructions to do it manually would result in clobbering the system versions of the included libraries.
- It uses the prefix of "G" for its types -- which clashes with glib (a library that is far better-known, and long predates it).
- The code quality is generally poor, although that's not really a packaging concern.
- Not only do you have to set AMANITHDIR at build time, it also has to be set at runtime for any application linked against the library.
- The library documentation is helpfully supplied in the proprietary format used by Windows Help.
- The Python bindings package is equally crappy -- tied to particular SWIG versions, lots of C++ errors with modern compilers...
- The API spec contains things that cannot possibly compile -- look at the multiple ambiguous definitions of DrawEllipseArc, for example.
Posted by David at 2006-08-11 07:34
A spot of perspective
Posted by ats at 2006-08-11 02:18
Intel's free-software drivers for their graphics chipsets. cheer
Now, if only someone did a standalone Intel 965-based graphics card...
Posted by ats at 2006-08-11 01:14
A free-software clone of Guitar Hero.
The original game is superb; I haven't tried this clone yet, but it looks hopeful...
I'm not entirely convinced that playing it with a regular keyboard would be quite the same as using the proper guitar controller, though.