WSL und Crosscompiling

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

WSL und Crosscompiling

Beitrag von Warf »

Hey ho Leute.

Beim rumspielen mit dem Windows Subsystem for Linux (WSL) ist mir etwas interessantes aufgefallen. Falls es jemand nicht kennt, das WSL ist ein System um Linux Programme unter Windows auszuführen (ähnlich zu Wine unter Linux). Das WSL übernimmt also lediglich Kernel funktionalität, bzw übersetzt Linux Kernel anfragen für den NT Kernel. Darum gibt es dann Distributionen (ich verwende OpenSuSe) welche eine Linux-ähnliche Umgebung schaffen. Das WSL hat allerdings auch vollen Zugriff auf die Windows Welt z.B. auf das Dateisystem, so können sogar Windows Anwendungen aus dem WSL ausgeführt werden. Linux Programme können über das Programm C:\Windows\System32\wsl.exe ausgeführt werden (z.b. "wsl ls" führt ls der Coreutils der Distribution aus).

Wenn man jetzt auf der Distribution FPC installiert hat kann man einfach pascal Programme kompilieren: "wsl fpc ./test.pas". Damit spuckt mir der FPC für Linux ein wunderbar funktionsfähiges Linux X64-86 Programm aus. Da auch Windows Pfade im WSL angenommen werden können sogar die von Lazarus generierten FPC Aufrufparameter für ein Projekt einfach übernommen werden.

Da stellt sich mir jetzt die Frage, könnte man nicht in Lazarus ein WSL Interface zum Crosscompilen implementieren? AFAIK ist es auch einfacher von Linux X64-86 zu anderen Platformen wie Linux ARM oder Mac OSX zu Crosscompilen, was damit für Windowsnutzer dann genauso einfach möglich wäre.

Den GDB könnte man so übrigens genauso verwenden

Was haltet ihr davon?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: WSL und Crosscompiling

Beitrag von Mathias »

Falls es jemand nicht kennt, das WSL ist ein System um Linux Programme unter Windows auszuführen (ähnlich zu Wine unter Linux)
Wurde dies nicht kürzlich in Win10 eingebaut ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: WSL und Crosscompiling

Beitrag von thosch »

Wenn das der Fall wäre, wie rufe ich das denn dann auf? Und mit welchem Update kann ich dann damit rechnen, das WSL zu besitzen?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: WSL und Crosscompiling

Beitrag von Mathias »

Zuerst installieren, das Paket heist: "Windows-Subsystem für Linux (Beta)".
Ich hoffe das dies weiter hilft.

Und mit welchem Update kann ich dann damit rechnen, das WSL zu besitzen?
Dies ist schon länger dabei, aber ist immer noch Beta.

PS: Die Anhänge gehen wieder nicht mehr.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: WSL und Crosscompiling

Beitrag von Warf »

Wenn du eine aktuelle Windows 10 Version hast (Mindestens Herbstupdate 2017) kannst du dir einfach eine Distribution (OpenSuSe oder Ubuntu) aus dem Windows Store runterladen. Das ist einfach klicken und warten bis es installiert ist (Eventuell musst du vorher noch in Features hinzufügen und Ändern das Windows Subsystem für Linux installieren, weiß es nicht mehr genau). In älteren versionen ist nur die beta drin von der Matthias erzählt, die ist etwas umständlicher.

Wie genau das mit multiplen distributionen (z.B. OpenSuSe und Ubuntu) läuft weiß ich nicht, ich verwende nur OpenSuSe

Für eine komfortablere Nutzung kann man sich auch das WSLtty runterladen, ein Terminal emulator für die WSL der auf mintty aufbaut, mit revolutionären Features wie context Menüs, etc., wie man sie von anderen Systemen wie xTerm unter Linux oder dem Terminal von OSX kennt, oder die Git Bash, falls die wer benutzt (kann ich auch nur empfehlen).

Mathias hat geschrieben:Dies ist schon länger dabei, aber ist immer noch Beta.


AFAIK ist seit dem Fall Update das aus der beta raus oder irre ich mich da?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: WSL und Crosscompiling

Beitrag von Mathias »

In älteren versionen ist nur die beta drin von der Matthias erzählt, die ist etwas umständlicher.

Ich versuche gerade dies zu installieren, nur ist Win10 in der VB gähnend langsam. Ich liebe Linux, ein kurzes "apt install abc", ein paar Sekunden und es ist installiert, Windoof braucht für sowas fast ein Schaltjahr. :evil:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: WSL und Crosscompiling

Beitrag von Warf »

Mathias hat geschrieben:
In älteren versionen ist nur die beta drin von der Matthias erzählt, die ist etwas umständlicher.

Ich versuche gerade dies zu installieren, nur ist Win10 in der VB gähnend langsam. Ich liebe Linux, ein kurzes "apt install abc", ein paar Sekunden und es ist installiert, Windoof braucht für sowas fast ein Schaltjahr. :evil:


Das Problem dabei ist, Windows ist sehr Grafik aufwendig und virtualbox kann das nicht so gut. Darum habe ich mir für meinen Mac Laptop VMWare gekauft, da ich darauf öfter mal Windows benutzen muss, und es das deutlich schneller macht

Der Alte installer ist aber auch super Low über den Windows Store geht’s besser (und ich mag openSuSe mehr als ubuntu, das gibt’s nur mit dem Store)

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: WSL und Crosscompiling

Beitrag von Socke »

Warf hat geschrieben:Da stellt sich mir jetzt die Frage, könnte man nicht in Lazarus ein WSL Interface zum Crosscompilen implementieren? AFAIK ist es auch einfacher von Linux X64-86 zu anderen Platformen wie Linux ARM oder Mac OSX zu Crosscompilen, was damit für Windowsnutzer dann genauso einfach möglich wäre.


Reicht es nicht aus, im Projekt einen zweiten Erstellmodus mit anderem Compiler (wsl fpc) einzurichten?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: WSL und Crosscompiling

Beitrag von Niesi »

Warf hat geschrieben:Hey ho Leute.

Beim rumspielen mit dem Windows Subsystem for Linux (WSL) ist mir etwas interessantes aufgefallen. Falls es jemand nicht kennt, das WSL ist ein System um Linux Programme unter Windows auszuführen (ähnlich zu Wine unter Linux). Das WSL übernimmt also lediglich Kernel funktionalität, bzw übersetzt Linux Kernel anfragen für den NT Kernel. Darum gibt es dann Distributionen (ich verwende OpenSuSe) welche eine Linux-ähnliche Umgebung schaffen. Das WSL hat allerdings auch vollen Zugriff auf die Windows Welt z.B. auf das Dateisystem, so können sogar Windows Anwendungen aus dem WSL ausgeführt werden. Linux Programme können über das Programm C:\Windows\System32\wsl.exe ausgeführt werden (z.b. "wsl ls" führt ls der Coreutils der Distribution aus).

Wenn man jetzt auf der Distribution FPC installiert hat kann man einfach pascal Programme kompilieren: "wsl fpc ./test.pas". Damit spuckt mir der FPC für Linux ein wunderbar funktionsfähiges Linux X64-86 Programm aus. Da auch Windows Pfade im WSL angenommen werden können sogar die von Lazarus generierten FPC Aufrufparameter für ein Projekt einfach übernommen werden.

Da stellt sich mir jetzt die Frage, könnte man nicht in Lazarus ein WSL Interface zum Crosscompilen implementieren? AFAIK ist es auch einfacher von Linux X64-86 zu anderen Platformen wie Linux ARM oder Mac OSX zu Crosscompilen, was damit für Windowsnutzer dann genauso einfach möglich wäre.

Den GDB könnte man so übrigens genauso verwenden

Was haltet ihr davon?



Warum und wozu?

Diese ganze Simuliererei von Betriebssystemen unter anderen Betriebssystemen kostet einfach nur Zeit. Quelltexte so halten, dass sie sowohl als auch einfach kompiliert werden können. Dann kann jedes OS seine Stärken ausspielen (oder eben jede "WarumauchimmerVorliebe" bedient werden).

Das Wesentliche ist doch, mit Lazarus gute Software zu entwickeln ...

Ist jetzt mal so meine Meinung ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: WSL und Crosscompiling

Beitrag von Warf »

Niesi hat geschrieben:
Warf hat geschrieben:Hey ho Leute.

Beim rumspielen mit dem Windows Subsystem for Linux (WSL) ist mir etwas interessantes aufgefallen. Falls es jemand nicht kennt, das WSL ist ein System um Linux Programme unter Windows auszuführen (ähnlich zu Wine unter Linux). Das WSL übernimmt also lediglich Kernel funktionalität, bzw übersetzt Linux Kernel anfragen für den NT Kernel. Darum gibt es dann Distributionen (ich verwende OpenSuSe) welche eine Linux-ähnliche Umgebung schaffen. Das WSL hat allerdings auch vollen Zugriff auf die Windows Welt z.B. auf das Dateisystem, so können sogar Windows Anwendungen aus dem WSL ausgeführt werden. Linux Programme können über das Programm C:\Windows\System32\wsl.exe ausgeführt werden (z.b. "wsl ls" führt ls der Coreutils der Distribution aus).

Wenn man jetzt auf der Distribution FPC installiert hat kann man einfach pascal Programme kompilieren: "wsl fpc ./test.pas". Damit spuckt mir der FPC für Linux ein wunderbar funktionsfähiges Linux X64-86 Programm aus. Da auch Windows Pfade im WSL angenommen werden können sogar die von Lazarus generierten FPC Aufrufparameter für ein Projekt einfach übernommen werden.

Da stellt sich mir jetzt die Frage, könnte man nicht in Lazarus ein WSL Interface zum Crosscompilen implementieren? AFAIK ist es auch einfacher von Linux X64-86 zu anderen Platformen wie Linux ARM oder Mac OSX zu Crosscompilen, was damit für Windowsnutzer dann genauso einfach möglich wäre.

Den GDB könnte man so übrigens genauso verwenden

Was haltet ihr davon?



Warum und wozu?

Diese ganze Simuliererei von Betriebssystemen unter anderen Betriebssystemen kostet einfach nur Zeit. Quelltexte so halten, dass sie sowohl als auch einfach kompiliert werden können. Dann kann jedes OS seine Stärken ausspielen (oder eben jede "WarumauchimmerVorliebe" bedient werden).

Das Wesentliche ist doch, mit Lazarus gute Software zu entwickeln ...

Ist jetzt mal so meine Meinung ...


Das gute am WSL ist ja, es wird dabei kein Betriebsystem simuliert. Ich kann Linux Programme ausführen ohne dabei dem Linuxkernel auch nur nahe zu kommen. Habe daher weder den Performanceverlust von einer Virtuellen Maschine (klar ein bisschen was geht verloren, ist aber eher vom overhead vergleichbar mit docker oder der JVM), noch den Ärger ein dual boot einzurichten (Grade als Mac User ist es gar nicht so einfach Linux im dual/tripple boot zu haben). Zumal ich vor allem das problem habe, das ich schlicht weg nicht genug speicher in meinem Mac habe um Windows, OSX und Linux vollständig installieren zu können (Für linux bleibt höchstens 20-30 GB)

Auf der anderen Seite habe ich so oder so das problem das ich für Linux entwickeln muss (ich habe immerhin einen Linux Server auf dem die software am ende laufen soll), privat verwende ich allerdings nur Windows und Mac OS. Das heißt entweder muss ich eine VM mit Linux starten, die zum einen super langsam ist, zum anderen mir mindestens 20 GB wertvollen speicher kostet. Mit dem WSL allerdings kann ich für meinen Server kompilieren (eventuell sogar mit dem GDB bereits für Linux debuggen) ohne dabei einmal Windows verlassen zu müssen, ohne performance verlust, und mit weniger als 5GB festplattenspeicherverbrauch (Inklusive FPC. Lazarus und komponenten werden ja mit Windows geteilt).
Und Crosscompiling von Windows -> *nix ist schon immer etwas komplizierter gewesen, da wäre es wahrscheinlich deutlich einfacher statt fpc args einfach wsl fpc args zu verwenden (zumal man den neusten stable fpc mittlerweile sogar über zypper bekommt)
Zuletzt geändert von Warf am Mo 7. Mai 2018, 15:29, insgesamt 1-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: WSL und Crosscompiling

Beitrag von m.fuchs »

Warf hat geschrieben:Mit dem WSL kann ich für meinen Server Kompilieren (eventuell sogar mit dem GDB bereits für Linux debuggen) ohne dabei einmal Windows verlassen zu müssen, ohne performance verlust, und mit weniger als 5GB festplattenspeicherverbrauch (Inklusive FPC. Lazarus und komponenten werden ja mit Windows geteilt).
Und Crosscompiling von Windows -> *nix ist schon immer etwas komplizierter gewesen, da wäre es wahrscheinlich deutlich einfacher statt fpc args einfach wsl fpc args zu verwenden (zumal man den neusten stable fpc mittlerweile sogar über zypper bekommt)

Und wie testest du das ganze dann für Linux? Irgendwie verstehe ich den Sinn für Cross-Compiling nicht. Also abgesehen wenn man für leistungsschwache Systeme für AVR oder so entwickelt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: WSL und Crosscompiling

Beitrag von Thandor »

Also simulieren ist hir erst mal das falsche Wort es heißt emulieren. :wink:

Du darfst das WSL nicht mit eier virtuellen Machine vergleichen. Bei einer virtuellen Maschine wird ein PC emuliert mit CPU, Graphikkarte, Festplatte, ...
Bei WSL wird, nach meinem Verständnis, ein Linuxkern direkt auf der physischen CPU, ohne dass eine CPU emuliert werden muss, ausgeführt. Also ein "echtes" Linux unter/parallel zu Windows.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: WSL und Crosscompiling

Beitrag von m.fuchs »

Thandor hat geschrieben:Bei WSL wird, nach meinem Verständnis, ein Linuxkern direkt auf der physischen CPU, ohne dass eine CPU emuliert werden muss, ausgeführt. Also ein "echtes" Linux unter/parallel zu Windows.

Nein. WSL bietet eine Schnittstelle für Linuxprogramme die so tut als wäre sie ein Linuxkernel. Die Aufrufe werden entsprechend zum Windows-Kernel weitergeleitet.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: WSL und Crosscompiling

Beitrag von MacWomble »

WSL ist ein Kompatibilitätslayer und nutzt nicht den öffentlichen Linuxkernel.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: WSL und Crosscompiling

Beitrag von Warf »

m.fuchs hat geschrieben:Und wie testest du das ganze dann für Linux? Irgendwie verstehe ich den Sinn für Cross-Compiling nicht. Also abgesehen wenn man für leistungsschwache Systeme für AVR oder so entwickelt.


Auch über das WSL. Angenommen das WSL arbeitet wie der Linux Kernel, dann sollte das testen mit dem GDB der Linux Exec im WSL genauso ertragreich sein wie das testen unter Linux selbst. Da auf meinem Server auch OpenSuSe läuft ist das mit den Bibliotheken auch recht simpel, da ich einfach die selben Packages in Zypper installieren kann.

Ich kann z.B. einfach mit wsl fpc -g ./test.pas kompilieren, und dann mit wsl gdb ./test mit dem Debugger die Linux Exec debuggen. Die wsl.exe führt dabei nur den Linux GDB aus und verhält sich daher genauso. Prinzipiell müsste Lazarus damit also genauso kommunizieren können wie mit dem GDB.

Da es auch X-Server für Windows gibt könnte es sogar möglich sein GUI anwendungen über Linux laufen zu lassen, dafür kenn ich mich mit X11 und dem WSL aber definitiv zu wenig aus um da genaueres zu sagen zu können.

Antworten