Freitag, 2. Mai 2008

Meine Gedanken zu "freier Software"

Jetzt ist die "Freie Software" ja schon einige Jahre alt und gerade in den letzten Jahren rücken freie Betriebssysteme immer mehr ins Blickfeld der Öffentlichkeit. Aber was bedeutet es eigentlich das Software FREI ist? Heißt es das ich dafür nichts bezahlen muss, also sowas wie "Freibier"? Nein, "Think of free speech, not free beer". Es geht in erster Linie um die Freiheit die durch diese Software erzielt werden will. "Ah, dann ist also Skype und Flash frei, da es mir Freiheiten bietet und nichts kostet?". Nein, es bewirkt genau das Gegenteil. Nehmen wir mal Flash. Klar, es ist wunderbar Youtube und andere Seiten in voller Pracht zu sehen aber was bringt das alles mit sich?

Nur der Hersteller liefert Binarys. Das fällt vor allem auf wenn man sich die 64-Bit Version von Kubuntu ansieht. Was für ein technischer Aufwand muss betrieben werden damit man das 32-Bit Flash auf einem 64-Bit System zum laufen bringt. Endresultat: Viele nutzen lieber die 32-Bit Version. Ferrari fahren und Diesel tanken. "Aber ich will doch meine Youtube Vids sehen!". Nichts hindert dich daran. Mit dem Paket youtube-dl erhält man ein wunderbares Skript zum herunterladen von FLV Dateien die eigentlich inzwischen jeder gängige freie Mediaplayer abspielen kann.

Bugs können nur vom Hersteller behoben werden, und das dauert gerade beim Support für Nicht-Windows-Systeme gerne mal so richtig lange. (Flash hat 3 oder mehr Jahre gebraucht um bei Linux auf den neusten Stand gebracht zu werden). Der Hersteller unterstützt nur das was er für richtig hält und nicht was der User gerne hätte. Hersteller backen gerne mal ihre eigenen Brötchen. Beispiel Nvidia, welche nicht die Beschleunigungsarchitektur von Xorg nutzen sondern lieber alles noch mal selbst implementieren, damit praktisch das Rad neu erfinden und den User wieder dazu zwingen einen Kernel zu nutzen der mit ihrem Treiber funktioniert. Inzwischen ist der Nvidia Treiber schon zu einer beträchtlichen Größe angeschwollen. Intel Treiber nutzen dagegen die gegebene Infrastruktur und sind wenn es um technische Neuheiten geht (z.b. AIGLX oder Gallium3d) immer vorne mit dabei.

Ich könnte hier noch ewig auf hohem Niveau meckern, aber ich werde das Wort einfach mal an Richard M. Stallmann weitergeben, welcher oft kritisiert wird aber mit dem ich doch in vielen Sachen einer Meinung bin.

Stallmann im BSDTalk Interview

Am Ende sollte jeder selbst entscheiden was für ihn das richtige ist. Ich persönlich verzichte lieber auf ein paar Bequemlichkeiten und greife auf eine FREIE Alternative zurück, aber ich war schon immer etwas idealistisch veranlagt ;)

Bloggen mit Kblogger

Dann bin ich ja mal gespannt. Das hier ist der erste Blog den ich mit der Bloggersoftware KBlogger verfasse (das Paket dafür heißt unter Kubuntu kblogger-kde4). Wenn alles gut geht bin ich nicht mehr auf diese nervige Weboberfläche von Blogspot angewiesen die eh nicht wirklich gut mit dem Konqueror zusammenspielen will.

Der Preview scheint sich etwas über Umlaute zu beschweren, aber ich hoffe mal das Problem kriegt sich selbst in den Griff.

Also: Einmal testen bitte ^^

UPDATE: Ja es kriegt sich selbst in den Griff :D

Dienstag, 15. April 2008

Hello Planet.... want Software?

So, ich wollte mal meine Präsenz in den Planet brennen, da ich ja schon mit größter Ausdauer im IRC für mehr oder weniger Unruhe sorge ^^. Und wie das so ist mit Besuchern: sie bringen erst mal Glasperlen um sich bei den Einwohner einzuscheissen. Glasperlen sind hier aber eher weniger gefragt (Es sei den man hat das stylische Medion mit Glitzersteinchen... *erm*), darum bring ich erst mal etwas Code in die Runde. Ein kleines 5-a-Day Applet für KDE4. Leider sind die Icon Pfade derzeit etwas b0rked und ich zeitlich nicht wirklich so flexibel das ich das jedesmal ändern will wenn jemand ein neues Paket schnürt, aber findige Coder können das schnell fixen ^^ (oder man verzichtet auf das Systrayicon und stochert im Leeren rum)

Um an den Code ranzukommen, einfach mal Bazaar konsultieren:

bzr checkout http://bazaar.launchpad.net/~raichoo/+junk/5aDay

Derzeit haben wir unter KDE4 leider noch keine Abfrage für ssh-passphrases, also sollte man den mit ssh-add dezent hinzufügen. Zum starten braucht man Python und die dazugehörigen Qt4 Bindings.

Auf der TODO Liste steht derzeit noch:

Drag & Drop Support
KDE4 Bindings nutzen
etc.

Freitag, 14. Dezember 2007

Kubuntu Tutorials Day

So, gestern war es also soweit: Kubuntu Tutorials Day. Besonders interessant warnen da für mich das Bazaar und Launchpad Tutorial. Leider ging das Paketierungstutorial etwas im Chaos unter da sich mittendrin auf einmal unser Tutor vom Netz getrennt hat und "The Man" Jonathan Riddell persönlich übernommen hat.
Besonders beeindruckend fand ich die Möglichkeiten die den *ubuntu Entwicklern zur Verfügung gestellt werden, darunter auch das PPA (Personal Package Archive) welches nicht nur ein persönliches Repo zur Verfügung stellt sondern sogar eigenständig Pakete übersetzt (für unterschiedliche Architekturen) und in .deb Form presst. Leider scheint mit das .deb Format ziemlich aufwändig im Vergleich zu ebuild von Gentoo und irgendwie auch etwas unübersichtlich. Da gibt es Skripte für dies und jenes in unterschiedlichster Ausführung und irgendwie keine klare Linie. Naja vielleicht bin ich auch einfach zu eingeschossen auf etwas anderes.
Auch der kleine Ausflug und die Python/Qt4/KDE4 Welt war durchaus einen Blick Wert. Zwar halte ich C++ immer noch für die beste Sprache um Applikationen zu entwickeln aber für kleine Aufgaben ist Python wirklich ein mächtiges Werkzeug und erspart einem eine Menge Aufwand in Punkto kompilieren.
Alles in allem bin ich sehr angetan von der Kubuntu Community und werde mich in der nächsten Zeit auf jeden Fall mehr mit der Materie befassen und auch eventuell irgendwann MOTU (was in *ubuntu Sprache soviel wie Master of the Universe heisst ;) ).

Donnerstag, 9. August 2007

Bootsektor schreiben mit GNU Assembler

Wird mal wieder Zeit die Regler auf Geek zu stellen ;) (man merke an das ich gerade japanischen Hardcoretechno höre dessen Text wie folgt geht : uauauauauaä uauauauauä.)

Ok zum Thema. Der GNU Assembler ist ja nicht jedermanns bester Freund da er die AT&T Syntax verwendet und darum greifen viele lieber zu NASM. Aber ich persönlich bevorzuge auf jeden Fall die GNU Lösung da sich das ganze sehr schön in die GNU Compiler Collection einbindet. (Für alle die es noch nicht wissen sollten, gcc -s foo.c wandelt den C-Code in foo.s, den Assembler Code um ;) ). Aber über Geschmack lässt sich ja bekanntlich nicht streiten, ich werde hier auf jeden Fall den GNU As verwenden.

Das Objekt unserer Begierde ist heute also ein Bootsektor, also die ersten 512 Byte unseres Mediums. Hier ist die Partitionstabelle und ein kleines Programm welches unser Betriebssystem starten soll angesiedelt, dazu kommt noch eine Magic Number die dem BIOS sagt das es sich hier auch wirklich um einen Bootsektor handelt.

Die Partitionstabelle lassen wir jetzt einfach mal außen vor und befassen uns damit wie wir ein Programm in den Bootsektor packen das dann auch wirklich läuft. Auch wenn ich jetzt gesteinigt werde, wird das ganze in ein "Hello World" Programm ausarten ;). Da wir uns im Real Mode der CPU befinden und weniger als 512 Bytes zur Verfügung haben lohnt sich auch nicht wirklich mehr. Also erst mal zum Quellcode von bootsektor.s :

.code16
.text
.globl entry
entry:
mov %cs,%ax
mov %ax,%ds
mov %ax,%ss
mov $0x400,%sp

mov $.LC0,%si
call print
cli
hlt
.LC0:
.string "Hello World"
.globl print
print:
lodsb
or %al,%al
jz .endprint
mov $0x0e,%ah
mov $0x0007,%bx
int $0x10
jmp print
.endprint:
ret
.section .sig
.word 0xaa55

Wir richten also alle unsere Segment Selektoren (CS,DS und SS) und den Stack ein und packen die Adresse unseres Strings in das SI Register. Danach rufen wir print auf (call ist das was uns in C Funktionen aufrufen lässt) und laden das erste Byte aus SI in das Low Byte von AX (AL). Ist dieses gleich 0 wird das Z-Flag gesetzt (wegen or %al,%al) und jz springt nach endprint, wenn nicht wird der Aufruf des Interrupts 0x10 vorbereitet. Dieser Interrupt hat mehrere Funktionen wir nutzen in diesem Beispiel die Funktion 0x0e die für das ausgeben eines Zeichens verwendet wird. Der Funktionswert muss im High Byte des AX Registers gespeichert werden (AH). Im Low Byte von BX speichern wir die Farbe unseres Zeichens (0x07 für weiß). Jetzt wird der Interrupt 0x10 aufgerufen, der kümmert sich auch darum das SI weitergeschoben wird zum nächsten Zeichen.

Zu guter letzt definieren wir ein eigenes Segment welches wir "sig" (soll für Signatur stehen) nennen. Das ist unsere Magic Number für das BIOS, diese muss ganz ans Ende unseres Bootsektors.

Ok, der Quellcode ist fertig. Nun wandeln wir unseren Code erst mal in ein Object File um welches wir danach linken. Dies geschieht wie folgt :

gcc -c bootsektor.s

Jetzt müssen wir nur noch linken damit die Adressen in unserem Bootsektor auch passen. Das BIOS lädt den Sektor in den Speicher an die Adresse 0x7c00 das müssen wir unserem Programm mitteilen damit es überhaupt Lauffähig ist. Außerdem muss unsere "Magic Number" auch an die passende Stelle geschoben werden. Das machen wir mit einem Linker Script (link.ld) :


OUTPUT_FORMAT(binary)
ENTRY(entry)
SECTIONS
{
.boot_sector 0x7c00 :
{
*(.text)
*(.data)
. = 510; *(.sig)
}
.bss :
{
*(.bss)
}
}

Mit "ld -T link.ld -o bootsektor bootsektor.o" wird unser Object File in ein 512 Byte großes Binary umgewandelt umgewandelt den man mit "dd if=bootsektor of=/dev/fd0" auf eine Diskette schreiben kann oder (viel besser, denn wer hat heute noch Disketten ;) ) mit qemu -fda bootsektor -boot a mit qemu ausführen kann. Um das Linker Skript besser zu verstehen sollte man sich einfach mal das GNU Linker Manual anschauen. ;)

Bootsektoren schreiben ist eigentlich ziemlich sinnlos, aber es ist witzig das ganze mal gemacht zu haben da es einem interessante Einblicke vermittelt. Wenn man wirklich ein bootfähiges Programm erstellen will (also einen Kernel oder ähnliches) empfiehlt sich die Verwendung von GRUB und einer Multiboot-ELF. Dazu aber vielleicht irgendwann später ;)

Dienstag, 17. Juli 2007

Cryptographie für Jedermann

Dieses Wochenende habe ich mich einmal mit dem Thema Verschlüsselung auseinandergesetzt. Sei es jetzt bei Emails, Instant Messages, einzelne Dateien oder gleich ganze Datenträger.
Zum verschlüsseln von Emails und einzelnen Dateien bietet sich das Tool gpg an, welches auch ein sehr praktisches Frontend für KDE (und natürlich auch andere Oberflächen ;) ) besitzt. Ich als KDE Benutzer habe mich also mit dem Tool Kgpg befasst. Eigentlich gibt es darüber nicht besonders viel zu sagen, Schlüssel erstellen und auf einen Keyserver exportieren, sowie das signieren von Schlüsseln geht mit ein paar Klicks. Leider habe ich keine Funktion gefunden um Schlüssel zu widerrufen und musste deswegen auf die Kommandozeile ausweichen (vielleicht war auch auch einfach nur zu blind ;) ).

Kommen wir zu einer etwas spannenderen Sache : verschlüsseln von Konversationen. Eine Messenger bieten die Möglichkeit Nachrichten per gpg zu verschlüsseln, das müssen aber erst mal beide Messenger ohne Probleme unterstützen. Die beste Lösung allerdings scheint mir die sogenannte OTR (Off-the-Record) Verschlüsselung. Plugins sind für Kopete unter KDE-Look und für Pidgin unter Cypherpunks zu erhalten. Besonders gepampert werden wieder einmal die Mac User mit Adium X, welches OTR gleich mitliefert ;). Besonders chic an OTR ist die "Deniability". Die Verschlüsselung erlaubt einem somit einfach zu sagen "das habe ich so nie geschrieben und muss gefälscht worden sein". Ich will jetzt nicht dazu aufrufen irgendwelche kriminellen Machenschaften über IM planen, dennoch bietet dieses Feature die Sicherheit das jemandem nicht ungewollt irgendwelche Äußerungen untergeschoben werden.

Eine wirklich beeindruckende Leistung von z.B. Linux ist die Möglichkeit ganze Partitionen zu verschlüsseln. Das geht sogar so weit das sich selbst die Systempartition (bis auf /boot) verschlüsseln lässt. Wozu ist das gut? Nunja, da auf einer Festplatte meist persönliche Daten gespeichert wird, kann es schon in einer mittelschweren Katastrophe enden, wenn sich jemand sich die Platte unter den Nagel reißt. Auf einmal sind Kontodaten, Passwörter, Emailaddressen oder vielleicht noch viel sensiblere Daten futsch. Dazu bietet Linux eine kernelinterne Lösung mit DM-Crypt und dem Tool cryptsetup, welches mit dem Device Mapper zusammen arbeitet. Bsp. : auf der Partition /dev/sda4 liegt unser /home, nun erstellt cryptsetup ein Device mit dem Namen /dev/mapper/home (der Name ist frei wählbar). Dieses Device wird anstatt von /dev/sda4 in die fstab eingetragen. Mit zusätzlichen Einträgen in der crypttab und passenden Init Skripten wird man dann im Moment des mountens nach einem Passphrase gefragt. Ohne das läßt sich gar nicht erst auf die Partition zugreifen oder überhaupt die darauf gespeicherten Daten lesen. Für Ubuntu gibt es noch ein nettes Howto wie man seine Platten verschlüsselt. Leider hat der Kubuntu Installer beim installieren auf den verschlüsselten nicht wirklich zum Ziel geführt, also musste ich das System einmal unverschlüsselt installieren und danach einfach ein bisschen hin und her kopieren ;). Ein andere Punkt ist noch das die Kubuntu Live CD meine Festplatte unter hda erkannt hat und das installierte System unter sda.... naja vielleicht passiert da ja noch was ;)

Also : Viel Spass beim wiederentdecken der Privatsphäre :)

Sonntag, 17. Juni 2007

Alte Liebe rostet nicht!

Bei dem ganzen Gerangel was sich derzeitig um den Linux Kernel entwickelt, hab ich mich mal wieder dazu berufen gefühlt in den Weiten den Internets nach Alternativen für mich zu suchen. Was nicht heißen soll das ich jetzt auf einmal den Kernel wechseln will, sondern eher das ich mir für den Fall der Fälle (nämlich das Linus mit seiner Beharrlichkeit in Sachen GPLv2 alles in den Sand setzt) gerüstet wissen will.
Ich muss ja sagen : da hat sich einiges getan. Solaris hat mit der Veröffentlichung des Quellcodes von Solaris einiges bewirkt. Eine ganze Ansammlung an Distributionen hat es sich zum Ziel gesetzt jeweils als erstes eine Vollständig lauffähige Solaris Distro auf den Markt zu bringen. Das Projekt das mit dabei am meisten aufgefallen ist, ist Nexenta (www.gnusolaris.org). Eine auf Debian basierende GNU/Solaris Distribution. Der einzige Harken an der Sache ist das Sun den Quellcode unter einer eigenen Lizenz, nämlich der CDDL veröffetlicht hat. Diese ist zwar nach Definition als Open Source Lizenz anerkannt, aber ich persönlich bin doch eher ein Freund von GPL Lösungen (jaja ich weiß... unverbesserlich ;) ).
Die Suche ging also weiter (aber erst nachdem Belenix bei mir auf qemu versagt hat und ich zu Faul bin auf die 0.9 Version des Emulators umzusteigen. Naja in Gutsy ist sie ja drin). Und mit einmal mal fand ich das alte Sorgenkind der Free Software Bewegung wieder : HURD.
Das letzte mal hatte ich es vor einigen Jahren installiert. Debian hatte damals die Version K8 veröffentlicht, und danach ist nicht mehr viel passiert (dachte ich zumindest). Zwar war das System damals wie heute hemmungslos instabil, aber das Design..... meine Fresse. Inzwischen ist Debian/HURD in der Version K14 erhältlich. Leider hat sich nicht viel am System selber getan (bis auf PCMCIA Support und noch irgendwas das ich vergessen habe) aber es sind eine Menge neuer Pakete hinzugekommen. Selbst KDE ist inzwischen portiert worden.
Nächste Amtshandlung also : QEMU installieren, und HURD draufpacken.



Ein 2 GB Image ist dafür schon genug (ich bin mir derzeit nicht sicher ob die K14 bereits das Patch das Partitionen über 2 GB erlaubt enthält). Vom X Server werde ich erst einmal die Finger lassen, da mein kleines Notebook mit 512MB Arbeitsspeicher auch noch was anderes zu tun hat als 2 Betriebssysteme mit grafischer Oberfläche zu verwalten ;). Hier ein schöner Link zum Thema Qemu und HURD : http://eyeside.net/hurd/Hurd-on-QEMU.html
Nach ein bisschen Hick Hack hatte ich dann auch endlich etwas halbwegs brauchbares. Vorteil der ganzen Qemu Sache ist das man sich das Image mal ebend kurz auf DVD brennen kann, bzw als Loopback mounten wenn man mal Daten zwischen HURD und Linux hin und herschieben will. Qemu stellt sogar mehrere Möglichkeiten zur Verfügung die Netzwerkverbindung des Rechners zu nutzen und das emulierte System mit der Außenwelt zu verbinden (apt-get steht da also nichts mehr im Weg ;) ).
Alles in allem findet man schnell alles was man zum entwickeln braucht. Das Userland ist auf recht neuen Stand, nur halt am System harpert es halt noch ein bisschen. Da dieses halt derzeit auf dem GNUMach Kernel (ein Microkernel der nach heutigem Stand der Technik nicht mehr wirklich diesen Titel verdient ;) ) läuft welcher hemmungslos veraltet ist. Derzeit ist wohl Coyotos der heiße Favorit auf den neuen Titel "HURD-Unterbau".

Alles in allem hätte HURD die Möglichkeit die Kernelwelt ziemlich aufzumischen, da das Konzept so noch nie dagewesen ist. Leider fehlt es derzeit aber wohl an Entwicklern (wie immer...). Aber es bliebt zu hoffen das das System wirklich irgendwann mal das Licht der Welt erblickt, und nicht mehr weiter nur ein Schattendasein auf den Rechnern von Hackern fristet :)

Für alle die jetzt neugierig geworden sind hier noch ein paar Links :