Seite 1 von 1

Qt Lizenzierung und Geschwindigkeit

Verfasst: 14. September 2009 09:56
von donchris
Hi,
Ich würd mich im moment als Qt-semi-noob bezeichnen. Ich habe mich zwar schon fleißig mit Büchern eingedeckt, aber in meinem Kopf schwirren noch viele ungeklärte Fragen herum, die nur auf richtige Antworten warten.

I.) Lizenzierung
Eine meiner wichtigsten Fragen bezieht sich auf die Lizenz, doch weder Bücher und Internetrecherchen konnten mir helfen. Gerade da die neue LGPL Möglichkeit die ganze Sache noch atransparenter machten.

Ich will meine Software (die erst im Entstehen ist) unter der GPL veröffentlichen und habe nun folgende Fragen:

1. Wo muss man die Lizenz angeben -in jedem Quellcode-File, oder nur als txt mitliefern ?!
2. Wenn ich eine Qt Klasse (z.B. QTcpServer) erweitere und eine IMAP/POP3 Funktionalität implementiere, muss ich dann die neuen Klassen an Qt zurückliefern ? und wenn ja, an welche Adresse (irgendeine Email, oder gibt es eine gewisse Anlaufstelle?).
3. Darf ich dann die Software nach einiger Zeit zu kommerziellen Zwecken "missbrauchen", da ja LGPL möglich ist, müsste dies ja ohne Lizenzkosten funktionieren, oder muss man dann teure Lizenzen erwerben?

II.) Funktionsfähige eigenständige *.exe
Ich verwende den Qt Creator und kann funktionsfähige exe Dateien generieren, doch diese sind auf gewisse dlls angewiesen, die sicherlich nicht jeder "Clientel" hat, daher würde ich gerne alle benötigten Daten in die exe packen. Ist dies vorteilhaft und mit Qt Creator so leicht möglich ?

III)Programmierung
Mein erstes eigenes Projekt sollte ein kleiner Mailserver sein. Vor einigen Jahren habe ich den hmailserver entdeckt und war begeistert. Leider ist der ein C#-Programm und daher auf Unixoiden weitgehend lebensunfähig. Nun versuche ich einen kleinen Mailserver zu „kreieren“ der so leicht zu handhaben ist wie der hmailserver, aber dank C++ und Qt weitgehend plattformunabhängig ist und die Geschwindigkeitsvorteile von C++ nutzen kann. Nun aber zu den „eigentlichen“ Fragen:

1)Ist es ratsam auch den Server mit dem Qt-Framework zu schreiben ? Viele sind der Meinung, dass dies überdimensioniert sei und so C++ ausbremst. So würde ich denn die Kontrolleinheit mit Qt schreiben und den Server in reinem C++ & STL – doch dann wird man wahrscheinlich wieder Probleme mit den verschiedenen Plattformen bekommen, oder sind die Sockets usw. weitgehend gleich ??
2)Worauf sollte ich achten (bei der Programmierung eines weitgehend plattformunabhängigen Servers) ?

lg
donchris

Verfasst: 14. September 2009 10:34
von arj
Hallo und Willkommen im Forum!

Fragen über Fragen. Ich werde mal versuchen einige zu beantworten.
1. Wo muss man die Lizenz angeben -in jedem Quellcode-File, oder nur als txt mitliefern ?!
Wenn ich mir z.B. ein Linux-Sourcefile ansehe, dann steht dort im Kopf
This code is released under the GPL version 2.
Wenn man anderen Code anschaut, der unter GPL veröffentlicht wurde findet man ähnliches. Ob man es allerdings muss, konnte ich auch nicht rausfinden. Ich vermute mal folgendes: Wenn man nur die Gesamtheit Deines Projektes nur im ganzen beziehen kann, wird vermutlich ein einzelner Lizenzhinweis genügen. Kann man aber auch einzelne Files (wie zum Beispiel im SCM-Repository) beziehen, dann würde ich es als Header in die Dateien schreiben.


2. Wenn ich eine Qt Klasse (z.B. QTcpServer) erweitere und eine IMAP/POP3 Funktionalität implementiere, muss ich dann die neuen Klassen an Qt zurückliefern ? und wenn ja, an welche Adresse (irgendeine Email, oder gibt es eine gewisse Anlaufstelle?).
Nein, Du musst falls Du die Klasse QTcpServer direkt änderst die Änderungen wieder unter (L)GPL stellen! Zurückliefern an den originalen Entwickler muss man bei Software unter (L)GPL nicht.


3. Darf ich dann die Software nach einiger Zeit zu kommerziellen Zwecken "missbrauchen", da ja LGPL möglich ist, müsste dies ja ohne Lizenzkosten funktionieren, oder muss man dann teure Lizenzen erwerben?
Es ist Deine Software. Du kannst damit machen was Du willst. Du kannst allerdings natürlich niemanden der die Software unter GPL benutzt zwingen sie jetzt unter kommerzieller Lizenz zu benutzen.
Ich verwende den Qt Creator und kann funktionsfähige exe Dateien generieren, doch diese sind auf gewisse dlls angewiesen, die sicherlich nicht jeder "Clientel" hat, daher würde ich gerne alle benötigten Daten in die exe packen. Ist dies vorteilhaft und mit Qt Creator so leicht möglich ?
Man kann die Qt-Libs statisch linken (such einfach mal danach). Ob das vorteilhaft ist oder nicht ist schwer zu beantworten. Du hast den Vorteil, dass keine anderen Dlls mehr rumschwirren, aber dafür halt eine große Exe-Datei.


und daher auf Unixoiden weitgehend lebensunfähig
Schau Dir mal Mono an. Da funktioniert schon sehr viel!


Ist es ratsam auch den Server mit dem Qt-Framework zu schreiben?
Versuch es doch einfach einmal. Vielleicht genügt es Deinen Ansprüchen.


oder sind die Sockets usw. weitgehend gleich ??
Nein.


Worauf sollte ich achten (bei der Programmierung eines weitgehend plattformunabhängigen Servers) ?
Auf das übliche ;-) Auf schönen, gut dokumentierten, schnellen, leserlichen Code. Ach ja und er sollte plattformunabhängig sein :-p

Ich hoffe das hat Dich jetzt etwas weiter gebracht. :P

Verfasst: 14. September 2009 11:00
von donchris
Danke für die schnelle Antwort !

Also ich war mir bez. der ersten Frage über die Art der Bekanntmachung der gewünschten Lizenz sehr unsicher, da meist bei php-Projekten eine Datei im Ordner beiliegt, aber bei größeren Projekten die Art der Lizenz (teilweise auch ganze Ausschnitte) direkt im Quellcode standen, aber anscheinend ist das relativ egal.

Ja, ich kenne Mono, aber das löst nicht das eigenbtliche Problem. C# (.Net) verwendet ja die CIL und ist daher ein Java-Clon von M$ - Natürlich ein wenig anders, aber man hat einen Zwischencode der bei allen .Net Programmen gleich sein "sollte" und dann kurz vor der Ausführung kompiliert wird. Schön und gut, aber auch nur unter WIndows. Mono hat zwar schon relativ gute Resultate erziehlt, aber da ist mir nativer Code lieber. Also C++ und Qt mit einigen Änderungen, damit es auf den 3-Großen läuft (Win, Mac, Linux)... dadurch startet es schneller und arbeitet hoffentlich auch schneller, da der C++ Compiler sicherlich ausgereifter ist und einige Jahrzente schon optimiert wurde...

Eine Frage hätte ich aber noch: Wie steht es bezüglich Qt und Geschwindigkeit ? Es ist mir klar, dass dies ein qtForum ist und alle sicherlich ganz begeistert sind, aber ich hätte gerne eine "erliche" Meinung und Erfahrungsberichte. Sollte man Qt nur für die GUI verwenden, oder sind die Netzwerkklassen auch nicht schlecht ??
Schließlich möchte man nicht alles doppelt und dreifach programmieren, da man erst spät erkennt, ob es schnell genug ist.

EDIT:Habe mich jetzt für das dynamische Linken entschieden, da sonst einige Lizenzprobleme entstehen könnten.

Verfasst: 14. September 2009 11:56
von RHBaum
Wo muss man die Lizenz angeben -in jedem Quellcode-File, oder nur als txt mitliefern ?!
In den Bestimmungen zu der GPL steht, das du in deinem Projekt eindeutig auf die Lizenz (GPL) verweissen sollst. Mehr nicht. Wie ist eher Dir ueberlassen. Es gibt aber Empfehlungen, unter anderem in jedem Header und als seperate txt datei und als hinweisstext im About Dialog.
Eigentlich braeuchtest nur 1 von 3 möglichkeiten. Mit allen 3 bist auf der sicheren Seite ^^
Kannst du beim qt Creator keine benutzerdefinierten headertemplates einstellen ?
Wenn ich eine Qt Klasse (z.B. QTcpServer) erweitere und eine IMAP/POP3 Funktionalität implementiere, muss ich dann die neuen Klassen an Qt zurückliefern ?
DIe (L)GPL bestimmt, das unter der (L)GPL stehender Code den "Anwendern" auch der veraenderte Quelltext zugaenglich gemacht werden muss.
Anwender sind in dem falle alle die, die irgendwie zugriff auf dein "Packet" haben. Auch die, denen dein Packet ohne Dein Wissen weitergereicht wurden.
Wie du das haendelst ist Deine Sache. Anfrage per email und dann code zuschicken ist eine Möglichkeit. Quellen neben den binaries oder anderen packages eine andere. Nen SVN Repository mit lesezugriff fuer anonyme mit sicherheit die eleganteste ^^

daher würde ich gerne alle benötigten Daten in die exe packen. Ist dies vorteilhaft und mit Qt Creator so leicht möglich ?
wenn du alle deine verwendeten bibliotheken auch als statische bibliotheken bekommst, isses technisch möglich.
Ne fertige dll in eine "exe einbetten" iss imho nicht so ohne weiteres möglich, im gegensatz zu einigen so's bei Linux/Unix.
Zu beachten waer allerdings auch die lizenzierung. ein statisches einbetten hat eine andere bindung der lizenzen zu folge.
du kannst zum beispiel ein Programm schreiben, was propertiere programme / dlls nutzt, dein programm aber unter die GPL stellen, wenn die verwendeten programme / dlls bestimmte Bedingungen vorweissen und klar, deren lizenz es zulaesst.
Aber du wirst nie ein programm unter die gpl stellen duerfen, was code statisch anzieht, der nicht gpl kompatibel ist .....
Ist es ratsam auch den Server mit dem Qt-Framework zu schreiben?
Das ist schon fast ne glaubensfrage ....
Ab version 4 unterteilt die qt ihre module sinnvoller, so das du server schreiben kannst, die keinen unnötigen gui code anziehen.
Auf der anderen seite hat die qt wiederum eine viel hoehere release frequenz wie zum beispiel die C++ libs deines compilers, die sowieso auch beruecksichtigen musst.
Das koennte unter umstaenden zu aufwendigeren versionsverwaltung führen. Auf der anderen seite schadet eine solide versionsverwaltung nie, und die qt module sollte man mit sowas im Griff haben.
Weswegen ich skeptisch bei der qt fuer serverprogrammierung waer, waer das impliziete caching der daten der qt. das kann dir bei multithreading und performancebetrachtungen gehoerig in die quere schiessen. Zumindest muss man da tiefer hinter die qt internas schauen, als wie man es normal tun wuerde ....
So würde ich denn die Kontrolleinheit mit Qt schreiben und den Server in reinem C++ & STL
sowas solltest soweiso machen, weil das die flexiblitaet deines server sehr erhöhen. Server betreibt man ja meist auf nem decidierten server ohne gui kram, und pfelgen tut man ihn dann von nem anderen rechner, mit X oder windows drauf, aus

Ciao ....