Analyse von Open Source-Projekten auf Drittkomponenten

TheRepatriate

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
258
Hallo zusammen,

im Dienste der Wissenschaft :) bin ich auf der Suche nach ein paar Anregungen oder Informationen zu obengenanntem Thema. Verzeiht mir, wenn das Thema nicht 100%ig in dieses Unterforum passt, aber ich denke hier sind die meisten Experten unterwegs.
Im Groben geht es darum, dass ich Web Open Source-Projekte daraufhin untersuchen möchte, ob man aus ihnen Informationen (Name, Produzent, Version) über die verwendeten Drittkomponenten (z.b. jQuery ...) auslesen kann. Das ganze möglichst automatisch.
Untersucht werden dabei OS-Projekte mehrere Entwicklungsplattformen (PHP, .NET,...) und nur anhand ihres "Auslieferungs-Paketes" (also nicht zur Laufzeit oderso)

Nun meine Frage: Angenommen ihr hättet dieses Ziel. Wonach würdet ihr im einzelnen suchen, ohne dabei jetzt eine Entwicklungsplattform speziell zu betrachten? Gemeint sind Dinge wie Ordnerstrukturen (Vendor-Ordner), build-files, import-statements etc... was fällt euch ein?
Es ist auch nicht wichtig, ob das ganze letztendlich umsetzbar ist, ich brauche nur Ansätze :)
(Wenn ihr plattformspezifische Infos habt, dann nehm ich die aber auch gerne. Also Ala: "bei PHP ist das so und so...")

Ich hoffe ihr seid jetzt nicht vollständig verwirrt :) Danke im Voraus!
 
Nun, bevor ich irgend etwas anderes mache, würde ich eine Liste der am häufigsten verwendeten Drittkomponenten erstellen. Willst du dich dabei auf die am weitesten verbreiteten Komponenten beschränken - wie zum Beispiel das schon erwähnte jQuery - oder möchtest du das sogar auf öffentlich verfügbare Klassen/Funktionen/etc ausweiten?

Schließlich würde ich das in einem von zwei Wegen lösen:

1.) Man definiert eine Datei als den kleinsten gemeinsamen Nenner und erstellt eine Datenbank mit Datei-Hashes (MD5, SHA1 oder CRC32), die man eindeutig externen Komponenten (zum Beispiel jquery-*.js) zuordnen kann. Diese Möglichkeit ist natürlich eher restriktiv, so müsste man für jede einzelne jQuery-Version (und dann noch die komprimierten Fassungen) einen eigenen Hash kreieren.

2.) Deswegen wäre die die zweite Möglichkeit die Verwendung von regulären Ausdrücken zur inhaltlichen Suche von Textdateien. Damit könnte man beispielsweise nach /jquery\.org\/license/ suchen und man würde zudem auch Dateien erfassen, die modifiziert wurden.

Ein Programm/Skript, welches die Open Source Projekte danach durchsucht, ist schnell gebastelt. Das Problem der ganzen Angelegenheit ist natürlich die Erstellung einer solchen Datenbank, denn DAS muss manuell durchgeführt werden. Ob sich diese Arbeit lohnt hängt stark davon ab, wie groß die Anzahl der zu durchsuchenden OS-Projekte ist. Sollte diese Zahl relativ klein sein, wäre es vielleicht sogar einfacher, wenn sich eine Person mit (zumindest) grundlegenden Programmierkenntnissen daran macht, die einzelnen Projekte nach fremdem Code zu durchforsten.
 
Bei OpenSource hast du ja Zugang zum Quellcode und Drittanbieterkomponenten (libaries) werden in den meisten Fällen im Order lib oder libs abgelegt.

Andere Einbindungen sind eher untypisch. Die Dateien kannst du durchgehen und im Kopf steht immer der Name, Version und Lizenz.
 
Zuletzt bearbeitet:
Bei vernünftigen Java-Projekten wird auf Build-Werkzeuge wie Maven oder Gradle gesetzt, die sich um das Dependency Management kümmern... dort müssten halt die Konfigurationsdateien betrachtet werden...
 
Danke euch beiden!

@dream_betty: Der Ansatz ist an sich super, nur kommt in meinem Fall ein manuelles Anlegen von einer Datenbank nicht in Frage, es sollte möglichst automatisiert ablaufen.

@DasBoeseLebt: Ja genau, ich habe Zugriff auf den Code. Der Weg über den Ordnernamen werde ich auf jeden Fall berücksichtigen, auch wenn sich der natürlich auch stark unterscheiden kann (libs, include, third-party, vendor...).
Ergänzung ()

@1668mib: bei Java-EE Projekten ist ja die standardisierte Form der Web Archive (.war Format) hilfreich, nur ist es auf anderen Plattformen schwierig. Bei PHP beispielsweise gäbe es Composer. Ist nur die Frage wie oft das benutzt wird.
 
Zuletzt bearbeitet:
TheRepatriate schrieb:
Bei PHP beispielsweise gäbe es Composer. Ist nur die Frage wie oft das benutzt wird.
Noch relativ weg, wird aber immer mehr und so manches größeres Projekt überlegt darauf zu setzen. Für deine Evaluation aber aktuell nicht nützlich.

Ich meine du müsstest erstmal deine Drittkomponenten definieren. Aber meist hat diese Software in den Dateien ihre Versionen stehen. Bei dem von dir vorgebrachten Beispiel steht die Version z.B. in der Datei. Und der Kommentar ist imho die letzten Versionen ziemlich gleich geblieben und bleibt auch in allen Projekten erhalten, immerhin muss die Lizenz noch angegeben werden.
Ansonsten würde ich alternativ über Dateinamen und Hashes gehen. Wenn jemand eine PHP-Lib einbindet, in der nirgends die Version steht so wird doch der Dateiname bei jedem genutzten Projekt gleich sein, und niemand wird die Datei modifzieren wodurch über den Hash die Version bestimmt werden kann.
 
Zurück
Oben