Microsoft hat in sein GitHub dieser Tage ganz viel Intelligenz reingekünstelt, die beim Programmieren in „öffentlichem Code“ (also unter anderem in auf GitHub liegenden Projekten) nach vermeintlich passendem Code sucht und aus diesem wiederum neuen Code generiert.
Wenn ich das richtig verstehe, läuft das ungefähr so ab:
- Der „Programmierer“ – wer seinen Code von Automatismen schreiben lässt, ist kein Programmierer ohne Anführungszeichen, sondern lediglich ein Knopfdrücker, wenn nicht gar ein
grüner KanzlerkandidatPlagiator – schreibt einen Funktionskommentar und/oder ‑prototypen, in dem er per Variablennamen, Funktionsnamen, Beispieldaten und so weiter ungefähr beschreibt, was er vorhat. So weit erst mal keine Einwände, immerhin klingt das nach auch für andere Leute verständlichem Code und das ist gut. - Die „künstliche“ „Intelligenz“ guckt, ob sie in den ihr bekannten Daten vergleichbares Ansinnen findet, und kopiert im Erfolgsfall vorhandene Codeschnipsel zu einem neuen Codeschnipsel zusammen, der vielleicht funktioniert oder auch nicht.
- Diese „künstliche“ „Intelligenz“ ist dabei dermaßen treffsicher, dass bereits nach wenigen Tagen Berichte im Netz zu finden sind, denen zufolge sie auch mal schlicht Ausschnitte aus der GPL als Kommentar vorschlägt.
In „0,1 Prozent der Fälle“, behauptet Microsoft, könne es vorkommen, dass ganze Codestücke vollständig übernommen „vorgeschlagen“ werden. Meine Kenntnisse im Lizenzrecht sind als mäßig zu bezeichnen, aber ich würde annehmen wollen, dass auch in 0,1 Prozent der Fälle aus unbekannter Quelle übernommener Code dem Entwickler des Originalcodes nicht gefallen dürfte. Natürlich auf Twitter wurde vorgeschlagen, Microsoft möge doch, wenn sie sich so sicher seien, dass die „Copilot“ genannte Beleidigung für richtige Programmierer schon niemandes Urheberrecht verletze, diesen „Copiloten“ – sogar gegen Bezahlung – mal mit dem Code des Windows-10-Kernels füttern. Bisher blieb dieser Vorschlag anscheinend unbeantwortet.
Das Lizenzproblem, auch für mich (so zwei, drei kleine Programme von mir liegen ja auch offen im Internet herum) nicht ganz uninteressant, ist aber gar nicht mal unbedingt das Ärgerlichste an dem Mitflieger. Viel wesentlicher scheint mir zu sein, welches Problem damit gelöst werden soll: Nutzer von Visual Studio Code, einem auf einem Webbrowser basierenden und darum außerordentlich ressourcenhungrigen „Texteditor“ von Microsoft, sollen so in die Lage versetzt werden, Programme zu schreiben, ohne programmieren zu können. Ich bin eigentlich nicht wählerisch, was die von mir genutzte Software angeht (Texteditoren ausgenommen), so lange sie ihren Dienst zufriedenstellend verrichtet, und ich halte auch nicht viel von Vorverurteilungen von Menschen, die ich meines Wissens überhaupt nicht kenne, aber ich bin mir trotzdem ziemlich sicher, dass es eine fürchterliche Idee ist, eine Generation von „Programmierern“ heranwachsen zu lassen, deren gesamte Programmiererfahrung darauf fußt, dass sie einen Knopf gedrückt haben und auf magische Weise Code erschienen ist, der dann auch noch halbwegs das getan hat, was sie erwartet hatten.
Quelloffen ist der „Copilot“ im Übrigen nicht. Nicht, dass den noch eine „künstliche“ „Intelligenz“ irgendwo reinkopiert!
(Hätte der Bullshifier nicht gereicht?)
Hätte man nicht warten können?!
Dann sind auch diejenigen die Stack Overflow nutzen keine echten Programmierer? Zum Programmieren gehört auch die Software-Architektur, alleine sich zu überlegen in was für Funktionen man sein Code aufteilt, wie man die Funktion nennt, wie die Variablen und ihn damit möglichst gut lesbar macht gehört bereits zum Programmieren. Ich bezweifle, dass die KI da in nächster Zeit so intelligent sein wird, als das man nicht aus selbst Programmieren muss. Wichtig wäre es m.M.n aber, dass der Author und die Lizenz des Snippets mit in den Kommentar eingetragen wird.
Wenn „aus fremdem Code Dinge zusammenkopieren und seinen Namen dranschreiben“ „Programmieren“ ist, haben Baerbock, Guttenberg und Milli Vanilli
ja alles richtig gemacht.
Ich glaube, da verwechselst Du was: Ein schlampig zusammengepfuschtes Buch ist peinlich und schlecht ( und zahlreich vorhanden), eine geklaute Doktorarbeit aber eine andere Nummer. Hatte die CSU such nicht exklusiv, wie man hört.
Milli Vanilli, das sagt ja der Name schon, ist in jedem Fall peinlich, mit Plagiat oder ohne.
Aber Bearbock und Guttenberg gehören nicht in einen Atemzug.
Naja ich sag ja, der original Author + Lizenz sollte schon automatisch als Kommentar dazu generiert werden. Wenn derjenige diesen dann entfernt ist es immerhin ein bewusstes klauen und das ist auch jetzt schon möglich, wenn auch etwas umständlicher.
Mein Gedanke war ähnlich wie der von Pascal: macht es einen Unterschied – außer im Zeitaufwand -, ob der Mensch Code aus StackOverflow kopiert oder die Maschine Code aus Github? Im Zweifel ist doch beides ähnlich katastrophal- oder kann gleichermaßen lehrreich sein, wenn man das als Ausgangspunkt für eigenes Verständnis und eigenen Code nimmt.
(Okay, und jetzt muss ich mir selbst widersprechen: es ist ähnlich katastrophal- sogar mit weniger eigenem Aufwand -, aber nicht gleichermaßen lehrreich, weil Erläuterung und Diskussion fehlen. )
Eben.
Kommt vermutlich darauf wie man damit umgeht, wenn die Quelle des Snippets dabei steht (keine Ahnung ob das der Fall ist?), dann könnte man sich ja zumindest den Kontext der Quelle anschauen und davon ebenfalls lernen. Wer den Code den er da verwendet nicht versteht wird irgendwann sowieso auf Bugs stoßen die er nicht beheben kann. Das gleiche kann dir bei StackOverflow passiert wenn du das bestnächste Ergebnis blind kopierst.
Der Unterschied liegt vielleicht darin, dass Code auf Stackoverflow ja genau deswegen dort veröffentlicht wird, damit ihn jedermann ohne weiteres Lizenzgehampel übernehmen kann.
Ein dickes Softwareprojekt unter GPL auf GitHub hat dagegen absichtlich die Lizenz bekommen.
Ja das ist sicherlich ein Unterschied, aber wenn mein Projekt unter der GPL steht, dann darf ich auch Code aus anderen Projekten die unter der GPL stehen einbinden. Wenn ein Projekt unter der MIT steht darf ich den Code sogar in kommerziellen Projekten verwenden und brauche ihn noch nicht einmal zurück geben.
Wenn ich ein Projekt unter einer freien Lizenz veröffentliche, dann u.a. auch damit andere ggf. etwas von dem Code lernen oder sich davon inspirieren lassen können.
Wenn ich es unter der GPL veröffentliche, dann erlaube ich das nur unter den gleichen Bedingungen und möchte nicht, dass meine Arbeit ungefragt in kommerziellen proprietären Projekten verwendet wird.
Wenn ich den Code unter der MIT veröffentliche, dann ist es mir ziemlich egal was andere damit machen.
Wer das mit der KI nicht gut findet sollte seinen Code also nicht unter der MIT veröffentlichen und lieber zur (A)GPL wechseln, dann wird man dagegen ach vorgehen können wenn Snippets verwendet werden die länger als 3 Zeilen (keine Ahnung wo die Grenze hier genau ist) Code sind.
Jetzt muss die KI nur noch die Lizenzen auf Kompatibilität prüfen (zumindest bei größeren Snippets), wenn sie das nicht macht, finde ich das auch nicht okay.
Mit Ausnahme der MIT‑0 (die ich in einigen meiner Programme nutze) verpflichten die meisten dieser Lizenzen zur korrekten Angabe der Originallizenz und des ursprünglichen Autors. Wie möchtest du dem in diesem Fall nachkommen?
Die KI pflegt eine Datei im Workspace in der alle aufgelistet werden. Diese lässt sich in unterschiedlichen Formaten exportieren (HTML, PDF, Markdown, …) Es wird ausdrücklich darauf hingewiesen, dass diese Datei in der Anwendung verfügbar gemacht werden muss.
In der Extension gibt es zudem eine allowlist mit Lizenzen die ich in meinem Projekt erlaube (oder eine blocklist).
Das ganze betrifft aber nur Snippets von x Komplexität.
Ich könnte mir auch etwas vergleichbares zur robots.txt vorstellen, wo man für sein Projekt festlegen kann, dass man nicht möchte, dass der Code automatisch durchsucht wird, oder das bestimmte Ordner nicht durchsucht werden.
Bestehst du eigentlich auch darauf wenn jemand sich einen Fünfzeiler per Hand aus deinem Source klaut? Ich meine, dass kann ja auch jetzt schon passieren. Oder ab welche Komplexität würde dich das stören?
Es könnte auch sein, dass mit der Zeit immer mehr optimierte Varianten beliebter Snippets auftauchen werden (da man ihn übernimmt, aber dann vielleicht noch optimiert). Würdest du das dann bei dir zurückportieren? Vielleicht wird dir die optimierte Variante sogar automatisch angezeigt wenn du auch die Extension installiert hast. Letztendlich ist das doch eigentlich auch im Sinne von OpenSource.
Ja, natürlich. Ich erinnere mich an keinen Passus in der CDDL oder der MIT‑0, in dem „This license is only relevant for more than 5 lines of code.“ oder vergleichbares stünde. Was an „Dieser Code steht vollständig unter $lizenz!“ bedarf deiner Meinung nach semantischer Überarbeitung?
Ich werde das Problem auf absehbare Zeit nicht selbst haben, da ich mich weigere, „Texteditoren“ zu benutzen, die erst mal eine vollständige Webbrowserengine hochfahren müssen, um mich Zeichen auf dem Bildschirm erscheinen lassen zu lassen.
Ja stimmt, die Lizenz und das Urheberrecht muss eingehalten werden. Bei einem Einzeiler der nicht wirklich individuell ist, wäre das vielleicht etwas anderes.
Menschen, die sich „Programmierer“ nennen, aber Einzeiler von einer „künstlichen“ „Intelligenz“ einfügen lassen müssen, gehört das Recht auf Computernutzung auf Lebenszeit aberkannt. YMMV.
Verwendest du keine Autovervollständigung? Dann gehörst du dazu, der Unterschied ist hauptsächlich, dass der Kontext noch mit einbezogen wird.
Nein, tu ich nicht.
Es waren Zeiten, als man sich als Entwickler für die veröffentlichte Software verantwortlich gefühlt hatte. Und zwar so, dass man sogar die Umgebung (aka Betriebssystem), die man als Plattform für die eigene Software verwendet („missbraucht“) hat, in- und auswendig lernen wollte, um im Falle eines Falles auch ein seltsames Problem ernsthaft analysieren zu können. Dann kam die Generation von „Entwicklern“, denen die Attitüde „it works on my machine“ keine Blamage dargestellt hat.
Und von da aus scheint der nächste logische Schritt der Verantwortungsdegradation, den die kommende Generation vermutlich mitmachen wird, nicht weit entfernt zu sein.
>Programme zu schreiben, ohne programmieren zu können.
Das ist generell ein Problem in der Softwareentwicklung. Ein Programmieranfänger kann heute bereits ein funktionierendes Programm in C / C++ / PHP schreiben. Das fällt demjenigen aber dann auf die Füße, wenn die bösen Buben ankommen und das Programm auf Sicherheitslücken abklopfen.
Ich wünschte, sie nutzten C.
Für nen Anfänger wäre Rust glaube ich besser geeignet. Der Rust Compiler haut dem Anfänger sein stinkenden Code hart um die Ohren, da der Rust Compiler es sich zur Aufgabe gemacht hat möglichst viele Probleme schon beim Kompilieren zu erkennen. Da heißt es: Entweder man lernt es richtig zu machen oder man kämpft ständig gegen den Borrowchecker.
Ich mag Rust, aber eben dieser Zwang zum grundlegenden Verständnis von Speicherverwaltung scheint vielen zu fehlen – darum ist C gerade für Anfänger meines Erachtens die klügere Wahl.
Ich würde jedem Anfänger heute empfehlen, möglichst schnell C zu lernen, denn C schafft einen Sinn für die Funktionsweise eines Computers, ohne so hirnzermürbend wie ein Assembler zu sein. Es gibt Speicher, Namen für den Speicher (Identifier für Variablen) und Adressen von Speicher. Und wenn man Speicher braucht, muss man ihn anfordern und wieder zurückgeben, wenn man ihn nicht mehr braucht. (Das war jetzt schon ein bisschen platt ausgedrückt, ich weiß.) Wer das versteht, bekommt eine Vorstellung davon, wie der Computer arbeitet.
Selbst, wenn man niemals ein größeres Projekt in C macht, hilft das so erworbene Wissen. Erstens, weil die C‑Syntax in viele moderne Sprachen hineinwirkt, und zweitens, weil man erahnt, welche Probleme zum Beispiel so eine automatische Speicherverwaltung machen kann. Ich habe mal gesagt: Speicher ist eine viel zu wichtige Ressource, um die Verwaltung einem Programmierer zu überlassen, aber Speicher ist auch eine viel zu wichtige Ressource, um die Verwaltung einem Automatismus zu überlassen. Wer erkennen kann, wann was an dieser Aussage wahr ist, wird viele Fehler nicht machen. Wer es nicht erkennen kann, wird die Anwender seiner Software mit fetten Klötzen für einfache und längst mit guter Software gelösten Aufgaben quälen (zum Beispiel mit einem Editor im Browser) oder sie mit dem Rätselraten darüber belästigen, warum dieses verdammte Programm eigentlich in unregelmäßigen Abständen zähflüssig wird. Nein, der Anwender kennt keine GC, der Programmierer sollte wissen, was das ist und gegebenenfalls, wie man die Speicherfreigaben so steuert, dass es keine »Hänger« gibt. Wer keinen Sinn für Speicherverwaltung hat, kommt nur leider nicht darauf.
Einer der größten Vorteile von Rust über C ist es, dass man keine Zusatzwerkzeuge wie lint benötigt, um schwer erkennbare und häufige Standardfehler zu entdecken, sondern vom Compiler das Näschen dahin gesteckt bekommt, wo man gar nicht schnuppern wollte. Lint haut einem typischen Anfänger auch den Code um die Ohren, aber aua! Und mir auch manchmal…
Ich würde allerdings auch jedem empfehlen, eine praktische Skriptsprache zu erlernen. Einfach nur, weil man damit insgesamt vermutlich Jahre an Lebenszeit spart. Welche das ist, ist beinahe gleichgültig.
Ich empfehle Lisp!
(Explosion in 3… 2… 1…)
Clojure FTW!
Ist doch gut so wie es ist, meine Zukunftsbücher aus den 70-ern und 80-ern haben immerhin behauptet, dass die Technologie bald überall ist und diese so einfach zu umgehen ist wie sonst nichts.
Da werden wir „alten Haudegen“ dann super überleben können.