Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'wp_widgets_init' not found or invalid function name in /home/quaid/iquaid.org/wp-includes/class-wp-hook.php on line 286
i, quaid / Shelf space – you can’t make it up as you go
Skip to content

Shelf space – you can’t make it up as you go

Today I had an exchange via Twitter with my friend Sean, who reminded me about a point we’ve previously discussed face-to-face, “… #opensource #FAIL meter http://bit.ly/nBcYz too Linux-centric – doesn’t apply to Java, Web or Ajax …”  My point back was, “… It applies if you want to deploy on #Linux … don’t #h8 your sysadmin, use existing standards v. making them up each time!”

I want to expand on that a bit, particularly around packaging, because my super-smart developer friends are correct about Java/Ruby/Python/PHP/et al packaging being great and sufficient … but only within their own realm. It really does fall apart as soon as you want to move outside of that realm to the shared world.

If you think of a Linux distribution as a grocery store, that’s a fair analogy.  People grow food at a farm (upstream projects), it is packaged and shipped to the store (RPM, DEB, FHS-compliant TGZ), and consumers come to the store to get the tasty food.  (It’s an incomplete analogy, because the open source consumers may also be the farmers, and the store is more like a farmer’s market in some ways, but let’s just call it imperfect and move on.)  Some people shop in the Fedora store because they like how we arrange the packaging on the shelves, and some people prefer the Slackware store for the same reason.

The grocery stores have come up with some standard ways to deal with food products.  We do it slightly differently depending on our own experience and customer-base.  Most food is packaged for shipment in boxes that are variations on the cube.  Even the apples that are stacked in a pyramid in a bin arrive at the store in an apple box.

These cube shapes are chosen because they:

  • Stack tightly for shipping.
  • Can be made of lightweight, inexpensive cardboard that can hold much more weight than you would think.
  • Are of the right size that an able employee can move them around the store while still being stackable on a pallet.
  • The packaging can be recycled and turned in to more cardboard.

Inside of the shipping boxes are often more boxes (except, for example, apples and beach balls, which come in a big box but are presented to consumers in really big bins.)  These boxes are made for the shelf to display and attract consumers.  Thus:

  • They are polished and pretty.
  • They stand up on precious shelf space; when a manufacturer pays to get a more prominent location on premium shelf space, the manufacturer wants to maximize the value of the effort/money spent.
  • The package tell customers what the food is for, what is in it, what others think about it, when it expires — built-in advertising and information.
  • The boxed packages fit nicely in the shopping cart, grocery bags, and on the shelves at home.
  • Good packages conform to standards that make them reusable in the home and recyclable in to future packaging.

So along comes a new company, let’s call it Java.  And another company, let’s call it PHP.  Java, well, they’ve got this great modular idea so their packaging can fit on any shelf while using minimum shelf space.  The packages are triangular, they stack really nicely, using this cool new tool to strap them together.

Oh, the cool strapping-together tool isn’t freely available?  I have to get a set of tools for each store to strap your special boxes to my shelves?  And that tool isn’t open source?

Sorry, that doesn’t fit on my shelf and I’m not going to retool my entire operation for your “unique” needs you think you have when you could have just iteratively built on top of what works already, but you are welcome to sell your stuff out front with the Girl Scouts.  There is always room out there, and many businesses get their start that way.

Now, PHP has these cool sphere packages.  They are easy to put together by anyone around their custom package-contents, and they move down the pipeline pretty quickly compared to good old square packaging.  While they don’t sit well on the store shelves, well, we can just add more bins for them, right?

Sure, until the whole store is nothing but balls and bins and balls bouncing from bins.  Staff are running around trying to get everything to stack right, no one can read a label because it’s often turned upside down on the sphere, and you can barely tell what are the old balls and what are the new, better, faster, more secure balls.

For a Linux distro to work, hundreds of pieces of software have to work together.  They do such a good job that you can make a following selling cookies in front of the store.  But if you really want to be big/useful to your users/something more than appears a few times a year, it is really helpful if you can be in a package that fits on the shelves and in the lives of your consumers.

Once you accept the idea of packaging, relying upon system libraries, making something that can actually be buildable from source and is truly redistributable, and do it successfully for one Linux distro, then you are 80% of the way there.  Adding another UNIX-like OS to your packaging is easier.  All of this won’t make it easier to deploy on non-UNIX-like OSes, but it also won’t make it harder.