# IntarS

IntarS ist eine Unternehmenssoftware (ERP, PPS, Warenwirtschaft) mit Weboberfläche für kleinere bis mittlere Handel-, Fertigungs- und Dienstleistungsunternehmen. Bis Version 6.1 war die Software komplett frei (unter der GNU GPL). Ab Version 7.0 steht IntarS unter der IOSCL (IntarS Open Source Commercial License). Diese besagt, dass der Anwender den Source bekommt und für seine internen Zwecke frei verwenden darf. Für kommerzielle Nutzung sind einmalig pro named User Lizenzgebühren zu entrichten. Nutzung für private Zwecke, Lehre und Forschung sowie Evaluierung sind kostenfrei. Ebenfalls kostenfrei ist die Nutzung der vorkonfigurierten „IntarS Lite“ Virtual Appliance, die „Candy CRM“ ablöst und als Freeware heruntergeladen werden kann.
IntarS ist ein kommerzielles Open-Source-ERP-System. Treibende Kraft hinter der Weiterentwicklung sind die IntarS Unternehmenssoftware GmbH und die nach einer Schulung zertifizierten IntarS-Partner. Sie bieten kostenpflichtige Professional Services an. Offene Schulungen bietet die IntarS Academy in Coburg an.
IntarS richtet sich vor allem an Unternehmen, die individuelle Anforderungen haben und eine in die Jahre gekommene Individuallösung (meist auf dBASE oder Access) ablösen wollen.

## Geschichte

Die Anfänge von IntarS reichen zurück bis 1996. Für ein datenbankorientiertes Kundenprojekt in Objective-C auf OPENSTEP mit häufig wechselnden Anforderungen entwickelte Pirmin Braun ein Modellierungswerkzeug, aus dem die IntarS Workbench entstand. In mehreren Folgeprojekten im Bankensektor und für die damalige BRAIN AG (später Agilisys, jetzt Infor) reifte das Anwendungsframework heran (Version 1).
1999 entstand in Zusammenarbeit mit Ralf Engelhardt die Branchenlösung „Möbel2000“ (Version 2).
Im Jahr 2000 gründeten Pirmin Braun und Ralf Engelhardt die seat-1 Software GmbH und entwickelten „Möbel2000“ weiter zu den branchenneutralen Produkten „seat-1 ERP“ für Fertigung und „seat-1 WaWi“ für Handel (Version 3). Als technische Neuerung kamen eine Weboberfläche und die Hybrid-Technik aus kompiliertem Code und Scripting zum Einsatz.
IntarS 4.0 kam Anfang 2004 unter GPL als schlankere Version der seat-1 Warenwirtschaft auf den Markt. Funktionsumfang, Operating, Arbeitsabläufe und Arbeitsteilung wurden auf die Erfordernisse kleinerer und mittlerer Unternehmen abgestimmt.
2006 hielt mit IntarS 5.0 eine noch stärkere Orientierung zu Skripting und kundenspezifischen Repositorien Einzug. In Folge entstanden Branchenlösungen für Elektro, Automotive, Fahrradhersteller und Verlage. Mit Version 5.1 wurde der IntarScript-Interpreter gegenüber der Vorgängerversion verbessert.
Mit IntarS 6.0 wurden 2010 unter anderem XHTML und interaktive SVG-Grafiken für Dashboards und OLAP, ein vereinfachtes Programmiermodell für Anwendungsentwickler, sowie Installations- und Operating-Werkzeuge eingeführt.
Version 6.1 brachte im Jahr 2011 Unterstützung für mobile Geräte, verbesserte Modularisierung, Erweiterungen des IntarScript-Sprachumfanges, neue Schnittstellen (z. B. für Microsoft Exchange und zur Finanzbuchführungssoftware Quickbooks), Integration in Roundcube und Refactoring des Frameworks.
Im Jahr 2012 erfolgte die Umfirmierung von „seat-1 Software GmbH“ in „IntarS Unternehmenssoftware GmbH“.
Im August 2013 wurde IntarS 7 released. Technisch neu war 64-Bit-Architektur mit Unterstützung für Amazon AWS, Umstieg auf aktuelle GNUstep Version, überarbeitete Middleware mit integriertem http Server, eigener Layout-Engine anstelle von GNUstepWeb, neuem IntarScript Interpreter und dem LGPL MariaDB Client. Auf Anwendungsseite gab es ein besser für Konzernstrukturen skalierendes Datenmodell, zusätzliche Schnittstellen (u. a. EDI, Outlook, Magento) und eine neue Oberfläche in HTML5 im Material Style von Google mit jQuery und inkrementeller Suche. Ab dieser Version wird IntarS unter der neuen IOSCL lizenziert. Die Abkehr von einer OSI-konformen Lizenz war nötig, um Lizenzgebühren erheben zu können.
Im August 2018 schied Pirmin Braun aus der IntarS Unternehmenssoftware GmbH aus, blieb aber externer Partner und entwickelte das Framework in einem eigenen Fork weiter, bis er im November 2020 seitens der IntarS Unternehmenssoftware GmbH abgemahnt wurde, die IntarS Marke nicht mehr zu benutzen. Seitdem bietet er seine Version unter dem Namen „Mosella ERP“ an.

## Funktionsbereiche

* Auftragsverwaltung
* Angebotserstellung
* Disposition
* Lagerwesen, Inventur, Mehrlager
* Rechnungslegung
* Projektabwicklung
* Bestellwesen
* Arbeitsvorbereitung
* Document-Management
* Groupware
* Fertigungsplanung
* Fertigungssteuerung, Leitstand
* Prozesssteuerung durch Barcode-Scanner
* CRM
* Statistik-Auswertungen
* Datev- und EuroFibu-Schnittstelle
* Fuhrpark
* Variantentechnik

## Systemvoraussetzungen

IntarS läuft nativ auf 32-bit und 64-bit Linux (vorzugsweise Debian), als Virtual Appliance auf weiteren Plattformen im Intranet und Internet. Als Datenbank kommt MariaDB zum Einsatz. Ein handelsüblicher PC als Server verkraftet 10 Benutzer gleichzeitig. Mit leistungsfähiger Hardware gibt es kein Limit für die Anzahl von Benutzern. Clients greifen über Web-Oberfläche darauf zu, z. B. mit Firefox oder Apple Safari.

## Technisches
### Architektur

In IntarS besteht eine Trennung zwischen Geschäftslogik und technischem Grundsystem.
Das Grundsystem ist in Objective-C geschrieben und mit dem gcc kompiliert. Es enthält einen Interpreter für IntarScript und Datenmodell, sowie eine allgemeine Infrastruktur für Datenbank, Druck, Oberflächensteuerung und Navigation, XML, Kommunikation und Betriebssystemzugriffe.
Die Geschäftslogik ist in IntarScript geschrieben (der dynamische Teil) und im Datenmodell definiert (der statische Teil). Die ca. 1000 Skripte und das Datenmodell bilden zusammen mit Moduldefinitionen, Layouteinstellungen, Stylesheet, Hilfedateien und weiteren Ressourcen das Repository.
Zur Laufzeit lädt das Grundsystem das Repository und wird dadurch zur eigentlichen Anwendung. Dies ist vergleichbar mit dem Laden eines Spreadsheets in eine Tabellenkalkulation.
Jeder registrierte Kunde bekommt eine eigene Mandantennummer, unter der sein individuelles (nicht öffentliches) Repository geführt wird. Damit bleibt das kompilierte Grundsystem update- und releasefähig.

### Programmierung

Um ein neues Repository zu bauen, wird das freie Standard-Repository 000230 oder das einer Branchenlösung dupliziert. Damit ist schon ein lauffähiges System vorhanden. Dieses wird nun nach und nach punktuell angepasst und erweitert.
IntarS hat eine flache Struktur von ca. 100 Modulen und 1000 überwiegend voneinander unabhängigen Scripts. Das hat mehrere Vorteile:
* hat ein Script einen Fehler, sind die Auswirkungen auf dieses eine Script beschränkt (defensive Programmierung)
* es können mehrere Programmierer parallel unabhängig voneinander daran arbeiten
* der Programmieraufwand kann gut abgeschätzt werden, da er proportional zur Anzahl der betroffenen Scripts ist
* die Versionierung und die Rückkehr zu einer bekannten lauffähigen Version kann in kleinen Schritten erfolgen
* ein Pool von fertigen Modulen steht bereit, um schnell eine maßgeschneiderte Version zusammenzubauen
Alle Änderungen im neuen Repository bleiben privat. Es kann „auf der grünen Wiese“ losgelegt werden ohne Rücksicht nehmen zu müssen auf eventuelle unerwünschte Auswirkungen in anderen Projekten. Umgekehrt beeinflusst auch kein anderes Kundenprojekt das eigene.
Die Scripts werden mit einem beliebigen Text-Editor bearbeitet. Für Notepad++, Sublime Text 3 und den integrierten CodeMirror steht eine IntarScript Sprachdefinition mit Syntaxhighlighting und Keyword Completion zur Verfügung. Es wird an der laufenden Anwendung entwickelt, indem nach jedem Editiervorgang die geänderten Scripts neu geladen und gleich getestet werden. Das dauert nur wenige Sekunden und kommt der agilen Softwareentwicklung entgegen. Jedes Modul hat zudem eine interaktive Konsole, in der Scripts vorab ausprobiert und im Trial- und Error-Verfahren verbessert werden können. Ziel dieses Vorgehensmodells ist, möglichst schnell eine genau passende Individuallösung zu erstellen, die zudem noch während der Programmierung lauffähig bleibt und während des Echtbetriebs genauso flexibel kontinuierlich weiterentwickeln werden kann.

### Unterstützung

Ein Grundgedanke von Open Source ist, dass man die Software anpassen kann. Dazu bietet IntarS folgende Unterstützung:
* Workbench zur Verwaltung des Datenmodells
* Skript-Verwaltung
* Migrationssuiten für dBASE und verschiedene CRM-Systeme wie z. B. Cobra Adressmanager oder SugarCRM
* Modulverwaltung, Layout-Designer, Indexverwaltung
* das Kapitel „Erweitern und Anpassen“ im Hilfesystem
* Tutorial
* IntarScript-Referenz
* Ein universelles Standard-Repository (Nr. 000230) als Anschauungsmaterial für „Programming by Example“

### Wiederverwendung

Die Geschichte zeigt, dass Geschäftslogik schwer zu abstrahieren ist und sich damit den Wiederverwendungstechniken Vererbung oder aspektorientierter Programmierung entzieht.
Um dennoch das Rad nicht immer neu erfinden zu müssen, propagiert IntarScript die ungeplante oder unscharfe Wiederverwendung: Ist eine neue Individuallösung einige Zeit im Einsatz gereift, werden die bewährten Module in einen Pool übernommen. Von dort werden sie bei Bedarf in ein anderes Kunden-Repository übernommen. Das geschieht textlich mit „Beyond Compare 4“ und der Workbench.
Die Repository-Struktur bis hin zur IntarScript Syntax ist auf möglichst effizientes Mergen hin optimiert:
* von Menschen lesbare Textdateien (UTF-8)
* zeilenorientiert
* innerhalb der Zeilen feste Felder
* nach Möglichkeit sortiert
* soviel Redundanz, dass eine Zeile für sich betrachtet schon aussagt, wo sie hingehört
* feste Verzeichnis-Struktur, die vorgibt, an welcher Stelle sich ein File befinden kann und wie es heißen muss.
Die Entwicklung der Versionierungswerkzeuge wie subversion oder git in den letzten Jahren mit ihren Branch-, Fork- und Merge-Techniken geht in die gleiche Richtung.
Es hat sich in der Praxis gezeigt, dass Mergen die Qualität verbessert. Durch das ständige Vergleichen von Files aus unterschiedlichen Repositories werden nebenher Fehler gefunden, weil sie als Unterschied aufleuchten.

### IntarScript

Ursprünglich entstand IntarScript 1997 als Interpreter zur Erzeugung von PDF. Im Laufe der Jahre wuchs der Sprachumfang ständig und wurde praxisgetrieben zu einer domänenspezifischen Sprache für die Implementierung von Geschäftslogik. Die Designziele der Entwickler waren:
* Effizienz, wenig Schreibarbeit
* DRY (Don’t repeat yourself) Prinzip
* wenig Overhead
* leichte Erlernbarkeit
* Uniformität
* gut zu versionieren und zu mergen
* einfacher, performanter, leicht zu erweiternder Interpreter
IntarScript nimmt Anleihen an C, Objective-C, bash, Ruby, Java, Perl, BASIC und dBASE.
IntarScript enthält Befehle zur:
* PDF-Erzeugung
* Feld- und Dialogsteuerung
* Datenbank-Abstraktion
* Eingabeverarbeitung
* Auswertung, Filterung, Suche, Import/Export Schnittstellen
* Batch-Verarbeitung
* Mail, Fax, Dokumentenmanagement
Skripte in IntarS sind verhältnismäßig klein. Da Standalone-Skripte erzeugt werden, lässt sich unbeschwert drauflos programmieren. Variablen sind defaultmäßig im Einflussbereich eines Scriptes global, typenlos, und haben kurze Namen. Lokale Variablen und Typprüfungen müssen dagegen explizit deklariert werden.
IntarScript lässt dem Programmierer keinen künstlerischen Freiraum. Es gibt genau ein Statement pro Zeile und Befehle und Operanden werden ausnahmslos mit Komma getrennt. Der Schachtelung von Ausdrücken sind Grenzen gesetzt. Diese restriktive Syntax erleichtert die Versionsverwaltung mit subversion und „Beyond Compare 4“ oder „Meld“ und erleichtert es, sich in fremden Scripts zurechtzufinden. Namenskonventionen werden forciert durch die Bevorzugung von Konvention vor Konfiguration.
Die Kombination aus kompiliertem Framework und Interpreter ergibt eine Gesamtperformance, die nur wenig hinter der eines komplett kompilierten Systems zurückbleibt. Das liegt daran, dass zum einen beim Systemstart zunächst alle Scripts eingelesen, geparst und in eine Art Bytecode überführt werden. Zum anderen laufen während des Vorgangs des Interpretierens die allermeisten Taktzyklen wieder in kompiliertem Code, weil es sich im Wesentlichen um eine Liste von Funktionsaufrufen handelt. Wäre das Framework dagegen ebenfalls in einer Scriptsprache wie z. B. PHP implementiert (solche ERP-Software-Systeme gibt es auch), wäre die Performance schlechter.
Es muss bei der Anwendungsentwicklung nichts mehr kompiliert werden. So wird laut Hersteller alles komplizierte, technische des kompilierten Frameworks von dem fachlichen, betriebswirtschaftlichen in den Skripten getrennt. Erweiterungen und Anpassungen erfolgen nahtlos mit derselben Technik, mit der auch der Standard erschaffen wurde.

## Trivia

Der Name „IntarS“ ist ein Akronym für: International adaptive realtime Software