Vergleich zwischen dem Original und seinen Abkömmlingen
osCommerce ist einer der bekanntesten freien Online-Shops. Besonders beliebt ist er auf Grund der vielfältigen Erweiterungsmodule und der großen Community. Weiterhin haben sicherlich auch die zahlreichen Dienstleister zum Erfolg beigetragen, die mittlerweile zahlreiche Dienstleistungen rund um osCommerce anbieten.
Trotz der vielfältigen integrierten Funktionen und der vielen Anwender gibt es aber in osCommerce auch sehr deutliche Schwächen:
In den letzten 30 Tagen (20. Mai bis 20. Juni 2006) gab es gerade ganze neun Änderungen im Repository, die allesamt sehr klein waren und auch nur die Übersetzungen betrafen. Es wurden in dieser Zeit also keinerlei Fehler behoben oder neue Funktionen hinzugefügt. Ich mache für die aktuellen Probleme bei der Entwicklung auch die schlechte Code-Qualität verantwortlich, die dafür sorgt, dass Bugfixes Nebenwirkungen haben, es viele Abhängigkeiten gibt und das manuelle Testen einfach Zeit kostet.
Soviel zum Original: Macht xtCommerce es aber besser?
xtCommerce ist eine Abspaltung von osCommerce: Die Macher von xtCommerce haben Mitte 2003 eine Version von osCommerce genommen und selbst weiterentwickelt. Insbesondere sind diverse Erweiterungen von osCommerce direkt im Code integriert, es gibt ein brauchbares Template-System (Smarty) und das System wurde entsprechend den geltenden gesetzlichen Vorschriften umgestaltet.
xtCommerce wird von der xt:Commerce GbR weiterentwickelt, deren Geschäftsmodell insbesondere daraus besteht, dass die aktuelle Version 3.x nur für "Sponsoren" zum Download bereitgestellt wird. Das Sponsor-Dasein kostet dann 98 Euro pro Jahr. Neben dem Download gibt es auch noch spezielle Unterforen, die nur von Sponsoren betreten werden können und in denen angeblich auch die Entwickler Support gewähren.
Technisch gesehen ist xtCommerce auf jeden Fall deutlich weiter als osCommerce in der Standardinstallation. Doch sehe ich auch einige Nachteile:
Absofort ist ein polnisches Sprachmodul für xt:Commerce 3.0.4 SP1 verfügbar. Die Übersetzung des Shops/Admininterfaces wurde in unserem Auftrag durch unseren Partner DialogTicket.com durchgeführt. (Qualitativ Hochwertige Übersetzung durch Muttersprachler). Das Modul ist gegen eine kleine Gebür erhältlich, um weiterhin neue und professionelle Übersetzungen zu finanzieren.
Die zahlreichen Rechtschreibfehler finde ich sehr peinlich ("Absofort", "Hochwertige", "Gebür"), ähnliche Fehler sind mir auch auf weiteren Seiten aufgefallen.
Technisch gesehen ist xtCommerce deutlich fortschrittlicher. Insbesondere das Templatesystem und die bereits integrierten contributions sorgen dafür, dass Aktualisierungen wenigstens etwas einfacher durchzuführen sind.
Rechtlich gesehen lässt sich die xt:Commerce GbR meiner Meinung nach nichts zu Schulden kommen. Allerdings bleibt auf Grund des rüden Vorgehens in den Foren mehr als nur ein kleiner Nachgeschmack, zumal die Weiterverbreitung der Software auf Grund der GPL möglich ist und es auch Seiten gibt, auf denen die Dateien zum Download angeboten werden.
Zudem betreibt die xt:Commerce GbR im Wesentlichen einen Closed-Source-Entwicklungsprozess, kann also von den klassischen Open-Source-Vorteilen nicht profitieren. Die durchgehende Kommerzialisierung von Templates, Contributions und Sprachdateien erhöht die Eintrittsbarriere weiter.
Michael Zanier weist in den Foren auch darauf hin, dass die Entwicklung auch finanziell honoriert werden müsse und inzwischen 80% des Katalog-Codes sich von osCommerce unterscheiden. Ich glaube gerne, dass alle Dateien inzwischen mehrfach verändert wurden (schon die Einführung eines Template-Systems sorgt für sehr viele Änderungen), allerdings sind viele wesentliche Teile nach einer kurzen Recherche meinerseits immernoch die selben. Als Beispiel findet sich hier im Anhang ein Vergleich der Datei checkout_shipping.php. Wie man sieht, hat sich dort wenig geändert. An vielen Stellen hat xtCommerce gleiche bzw. ähnliche Bugs wie osCommerce. Viele der eingebauten contributions existieren auch für osCommerce und wurden ursprünglich von Community-Mitgliedern unentgeltlich unter der GPL zur Verfügung gestellt.
Ich glaube nicht, dass osCommerce in den nächsten 1-2 Jahren xtCommerce ernsthaft herausfordern kann - dafür ist der technische Rückstand schon zu groß. Allerdings gebührt den osCommerce-Autoren wirklich Respekt dafür, dass sie über viele Jahre das System mit großem Einsatz weit gebracht haben. Die von ihnen gewählte GPL sorgt dafür, dass auch kein Unternehmen herkommen und das Produkt vollständig monopolisieren kann.
Andererseits sehe ich durchaus Chancen für einen xtCommerce-Community-Projekt, bei dem die Quellen des jetzigen xt:Commerce verwendet werden. Um marken- und wettbewerbsrechtlichen Problemen zu entgehen, sollte ein eigenes Template entwickelt werden und natürlich müssen auch alle Logos von xtCommerce entfernt werden. Unter einer kompetenten Projektleitung sehe ich dann aber durchaus Chancen für eine gesündere und langfristig profitablere Entwicklung.
Links die osCommerce Version (2.2 Milestone 2), rechts xtCommerce 3.0.4.
// if there is nothing in the customers cart, redirect them t // if there is nothing in the customers cart, redirect them t
if ($cart->count_contents() < 1) { | if ($_SESSION['cart']->count_contents() < 1) {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART)); | xtc_redirect(xtc_href_link(FILENAME_SHOPPING_CART));
} }
// if no shipping destination address was selected, use the c // if no shipping destination address was selected, use the c
if (!tep_session_is_registered('sendto')) { | if (!isset ($_SESSION['sendto'])) {
tep_session_register('sendto'); | $_SESSION['sendto'] = $_SESSION['customer_default_add
$sendto = $customer_default_address_id; <
} else { } else {
// verify the selected shipping address // verify the selected shipping address
$check_address_query = tep_db_query("select count(*) as t | $check_address_query = xtc_db_query("select count(*)
$check_address = tep_db_fetch_array($check_address_query) | $check_address = xtc_db_fetch_array($check_address_qu
if ($check_address['total'] != '1') { if ($check_address['total'] != '1') {
$sendto = $customer_default_address_id; | $_SESSION['sendto'] = $_SESSION['customer_def
if (tep_session_is_registered('shipping')) tep_session_ | if (isset ($_SESSION['shipping']))
> unset ($_SESSION['shipping']);
} }
} }
require(DIR_WS_CLASSES . 'order.php'); require (DIR_WS_CLASSES.'order.php');
$order = new order; | $order = new order();
// register a random ID in the session to check throughout th // register a random ID in the session to check throughout th
// against alterations in the shopping cart contents // against alterations in the shopping cart contents
if (!tep_session_is_registered('cartID')) tep_session_regis | $_SESSION['cartID'] = $_SESSION['cart']->cartID;
$cartID = $cart->cartID; <
// if the order contains only virtual products, forward the c // if the order contains only virtual products, forward the c
// a shipping address is not needed // a shipping address is not needed
if ($order->content_type == 'virtual') { | if ($order->content_type == 'virtual' || ($order->content_typ
if (!tep_session_is_registered('shipping')) tep_session_r | $_SESSION['shipping'] = false;
$shipping = false; | $_SESSION['sendto'] = false;
$sendto = false; | xtc_redirect(xtc_href_link(FILENAME_CHECKOUT_PAYMENT,