There's a Magento community edition that's free. I have no first hand experience running it but I've been following a couple of eCommerce podcasts for the last year or so and that's what almost all the interviewees are running. So perhaps this is one of those "it may not win any technical awards but it makes business sense" type of things.
mydb=> \dt
List of relations
Schema | Name | Type | Owner
--------+-----------------------------------+-------+---------
public | schema_migrations | table | mydb
public | spree_activators | table | mydb
public | spree_addresses | table | mydb
public | spree_adjustments | table | mydb
public | spree_assets | table | mydb
public | spree_calculators | table | mydb
public | spree_configurations | table | mydb
public | spree_countries | table | mydb
public | spree_credit_cards | table | mydb
public | spree_gateways | table | mydb
public | spree_inventory_units | table | mydb
public | spree_line_items | table | mydb
public | spree_log_entries | table | mydb
public | spree_option_types | table | mydb
public | spree_option_types_prototypes | table | mydb
public | spree_option_values | table | mydb
public | spree_option_values_variants | table | mydb
public | spree_orders | table | mydb
public | spree_pages | table | mydb
public | spree_payment_methods | table | mydb
public | spree_payments | table | mydb
public | spree_preferences | table | mydb
public | spree_prices | table | mydb
public | spree_product_option_types | table | mydb
public | spree_product_properties | table | mydb
public | spree_products | table | mydb
public | spree_products_promotion_rules | table | mydb
public | spree_products_taxons | table | mydb
public | spree_promotion_action_line_items | table | mydb
public | spree_promotion_actions | table | mydb
public | spree_promotion_rules | table | mydb
public | spree_promotion_rules_users | table | mydb
public | spree_properties | table | mydb
public | spree_properties_prototypes | table | mydb
public | spree_prototypes | table | mydb
public | spree_return_authorizations | table | mydb
public | spree_roles | table | mydb
public | spree_roles_users | table | mydb
public | spree_shipments | table | mydb
public | spree_shipping_categories | table | mydb
public | spree_shipping_method_categories | table | mydb
public | spree_shipping_methods | table | mydb
public | spree_shipping_methods_zones | table | mydb
public | spree_shipping_rates | table | mydb
public | spree_skrill_transactions | table | mydb
public | spree_state_changes | table | mydb
public | spree_states | table | mydb
public | spree_stock_items | table | mydb
public | spree_stock_locations | table | mydb
public | spree_stock_movements | table | mydb
public | spree_stock_transfers | table | mydb
public | spree_tax_categories | table | mydb
public | spree_tax_rates | table | mydb
public | spree_taxonomies | table | mydb
public | spree_taxons | table | mydb
public | spree_tokenized_permissions | table | mydb
public | spree_trackers | table | mydb
public | spree_users | table | mydb
public | spree_variants | table | mydb
public | spree_zone_members | table | mydb
public | spree_zones | table | mydb
(61 rows)