Tuesday, May 31, 2005

No Such Thing As a Free Beer

There's a weird, somewhat transient sense of "ethics" that comes with using Free Software. Free Software licenses, such as the GPL, do a terrific job at enforcing that the spirit of "liberated" software is that it remains free. Not free as in no cost, mind you, but free as in publicly available to all.

Some people struggle to understand what this means. The common phrase you'll often hear to illustrate the concept is that the software is "'free' as in 'free speech,' not as in 'free beer.'" The weird thing is that this is a freedom granted to the user, not to the owner, of the software. In a world where the owners are often given the most protection possible, this seems like an anathema of capitalism. Hence the term "copyleft" when talking about Free Software - it inverts the protection often offered by copyright licenses.

Even more people struggle to understand why the hell someone would release their hard work under a copyleft philosophy. From the experience I have, Free Software works well since in the end we're all consumers. We don't live in our own lil' self-sustained software ecosystem - we all depend on one another to get crap done. If we all build off of each other's work, if we all yield to the rights of the consumer, then eventually reap the benifits ourselves. You may be the owner of one piece software, but you're the consumer of a hundred other pieces. If everyone is protected as a consumer, and everyone is a consumer, transitively everyone wins.

But, just like every well-meaning philosophy, there are a group of wieners and dofuses that run afoul. You can't change that. On average, 80% of all people are idiots (dictated by my own "Chuckles' Theorem of Democracy"). So how do you protect your original utopian concepts? By making it legally binding and giving very specific terms of usage. That way at the very, very least you get someone who absolutely has to abide by the minimal terms set forth in your license and can't bring down the whole deck of cards.

Case in point. Sveasoft, which builds a Linux distribution for the infamous Linksys WRT54G(S), made everyone happy by creating an alternate firmware release based off of Linksys' GPL'ed codebase. Once everyone was happy, they started charging people $20 for using their support forums. Then they only started to release new firmware in the support forum. Then they started revoking people's subscriptions if they re-distributed the firmware (which they were allowed to do by the GPL, but by the same merit Sveasoft reserved the right to kick whomever they wanted out). Then they allegedly started threatening people who were offering the firmware releases to the public. Then they started charging for their next-generation of firmware releases, and required them to be activiated for a particular unit.

Technically, as long as they freely release the source code along with their binary releases they are still in line with the GPL. But people started to major league get ticked by the shift in protecting the user (so they could use or study the firmware for whatever purpose) to protecting the owner (who was trying to make money off his work). The point of reconcilliation here was that the GPL allowed redistribution and required source code disclosure of the firmware - but this was discouraged by kicking people off the forums. People felt shafted since their protection as consumers was no longer as strong as they had hoped.

But then look to projects such as CrystalSpace. Here's a team of developers that bust their respective butts to make sure people can easily use the framework, learn about real-time graphics rendering and develop their own apps. They've asked for donations, but mainly so they can replace their old, crusty workstations that were built using stone tablets and hamsters spinning inside wheels. Every piece of code, every scrap of documentation, every sample app is freely released. And the maintainers (very patiently, I might add) answer questions and help to develop the community. People regularly flock to CrystalSpace because they get to be in control over whatever the hell they want to do with it.

But where's the line in between? Think about Hibernate and Struts, two open source software projects that are widely used as frameworks for web applications. Yet the majority of the applications that take advantage of these LGPL'ed projects remain closed source, some available commercially. This is completely legit since the LGPL doesn't place restrictions on software that just refers to or makes library calls to LGPL projects. LGPL hasn't be violated. People don't raise a stink, so I'm taking it that they don't feel their user rights are violated. Maybe since Struts and Hibernate is mainly used to develop enterprise software people don't care nearly as much. After all, enterprises are still catching on to the whole "free software" concept, while individuals have been embracing it for decades. Maybe there are no consumers that feel burdened by closed enterprise software.

PlaneShift is another interesting example. Here's something that individuals would fight for their rights for - an MMORPG based on CrystalSpace. I actually did development for them briefly... they have an interesting stance of keeping their code open but their creative work (maps, character models, textures, story) closed. They have sizeable code contributions they give back to CrystalSpace, and their work has helped evolve a lot of the CS/CEL framework. The artwork, however, could be the commodity that could drive sponsorship/sales/membership. Again, people don't seem to balk at that... code is code, artistic content, however, is unique. In fact, this seems to be a point that Richard Stallman has made during a Slashdot interview and, related by Rusty, during a stump speech at The Bazaar in '99.

Or is it? Rusty claims that "programing may be an art but isn't Art" [emphasis his]. What about a unique and distinct AI algorithm that makes an NPC so weird but loveable? Or a procedural texture that renders so beautifully? Or an algorithm that spawns a forest of fractal trees? Or the events fed into a quest manager that drives the storyline? How about a visualization plugin to XMMS or Winamp?

It seems to me there's a more distinct difference between "unique" code and "core" code, and that's where the line should be drawn. "Core" code is that codebase that can be reused over and over by any number of projects. Hibernate, for example, can be reused for any number of purposes by a huge number of potential developers. The artwork for player characters within PlaneShift, however, can be a unique feature of PlaneShift itself. The AI algorithm that creates a dramatic character is a unique feature of a particular game, and perhaps can't be reused somewhere else. That which makes your application distinct and personal can be closed and distributed as "artwork," that which is global and reusable can be opened up for all to see. Some applications don't want to have distinctive or one-time-use features - they want to be as reuseable and functional as possible. Some applications want to be extremely unique - a visualization plugin for XMMS wants to be as different and distinctive as possible.

The difference is also in how much collaboration can be done. In art you're usually taking the thoughts, emotions and impressions of the artist and trying to portray them on whatever medium that artist is most expressive with. It could be film, canvas, clay or C++. Free Software seems to be, at its very heart, about collaboration. Everyone has equal access to code, and must submit its contributions back to the community. This collaborative process makes the software stronger and more refined. But it's hard to have that same collaborative effort with art... when someone inserts their impressions into the medium, it may change the voice of the original work entirely.

Maybe art is that which becomes something entirely different of something is added or taken away. Take away one word in Tom Sawyer, for example, and it ceases to truly be Tom Sawyer. Add some nips and tucks to ConsultComm, however, and it remains ConsultComm. Perhaps the standard is that art must stay intact to preserve its meaning and its impact.

Monday, May 30, 2005

I Hate That Cliché!

Always poignant, sometimes pungent David Wong recently posted an article about the "20 things gamers want from the seventh generation of game consoles." Aside from his very true observations about crates, stale genres and straight-out lying about in-game graphics, he also mentioned a few design items I thought were dead-on:

  • Doors aren't indestructible. Big wooden doors can be obliterated by a rocket launcher. A padlock won't help.

  • Games shouldn't have load times. It's true - now that I have next to no free time, I don't want to waste it trying to find the CD, then loading, then waiting for the distributor's movie to roll, then the producer's movie to roll, then the studio's movie to roll, then the intro cinematic to roll so I can go to the menu, load the last savegame, wait for the level to load, then get into actual gameplay. I'm already bored by the time I see any action.

  • Women are a HUUUUUUUUUUUGE audience that's being overlooked by nearly every single major release. Go to WomenGamers.com sometime and look around. Not only do they have better observations on the market than most sites (they were the first to actually convince me that Ageia's Physics Processing Unit might actually be worthwhile), but they also make excellent points about how game studios have absolutely no clue how to relate to the female gender. If any other business was so stupid, they'd be laughed off the planet. The gaming industry, however, is content to lose 50% of their audience because they never got past having gum spit at them by girls in high school.

    I'm hoping that by actually listening to the dissent out there... most of which I can really agree with... I can avoid some of the same design pitfalls.
  • Ah... Working at Home

    I took this three day weekend to do some extended hacking on my current project. I'm forcing myself to use CEL instead of CrystalSpace now, which means I just recently ditched my working engine with an isometric camera angle to use CEL's simple camera that follows the character everywhere.

    I'm working on getting an isometric viewpoint working, but it looks like its going to take more code. Still, if this means that saving/loading/collision detection/managing meshes is going to be easier, the longer ramp-up time should be worth it.

    It's so nice to hack in my peaceful abode. My better half has been wonderfully supportive in letting me hack away at my new pet project. And now I can blog when thoughts pop into my head instead of waiting until after work. I should take some vacation time to continue hacking next week. Ahh... so nice...

    I've been re-reading C++ Primer, Fourth Edition, trying to force my brain to switch from Java mode to C++ mode. It's amazing how much I've forgotten about pointer arithmetic and inline directives. It's a good book, albeit very anti-C.

    Tuesday, May 24, 2005

    Music Fills the Air... and Dead Air

    Some of you may have seen Eytan's comments to a post a while back. Actually, no one saw them because only two or three people know of this blog's existence. Anywho...

    Two of Eytan's original performances can now be had here at this very blog. Check out Carolina Shout and the transcendent That Mesmerizing Mendelssohn Tune. Ever since he e-mailed them to me I've been tapping my feet and dancing in my chair. One day I hope to listen to them.

    On the topic of gaming, it appears that GamingFM is down for the count. Up to you to decide if its for good or not. It's a bad sign, tho, when the streams go completely dead for two weeks and the server admins haven't updated the site in just as long. No word from the GamingFM crew what's going on - which probably means they're gone for good. Sad, really.

    Friday, May 20, 2005

    Isometric Engines

    I've halted work (for right now) with the texture mapping tutorial. My brother and long time encourager of my level building skills had a good game idea - so I'm going to try and flesh it out. If he can do the art entities (I'm hoping he can get up to speed with Blender and do some mesh work) then I think we can definitely do something. I'm working on building an isometric engine using CEL and CrystalSpace... something that CEL seems to do exceedingly well. It's basically just a fixed camera angle within the standard engine - your level design just has to adjust accordingly.

    Once again I forgot my sketchbook, which I'm going to have to carry around if I'm going to remember all these design ideas.

    Now the fun with building a dev environment.... w00t... just upgraded to SuSE 9.3, and the freakin' ATI drivers keep uninstalling my libGL.so symlink. So I have to keep reinstalling the xorg-x11-mesa drivers.

    Wednesday, May 11, 2005

    I'm not dead yet!

    Springtime illnesses. Ugh. I live in a petri dish. Well... more like a cattle ranch.

    Anywho, it's tough recovery but I think I'm ready to start working on an isometric implementation of CrystalSpace. That'll be fun.

    Freshly stuffed with chicken wings. Let's code!