Freitag, 6. November 2009

By popular demand: Meine .kshrc

Ich werde des öfteren mal nach meinen Einstellungen für die ksh93 die ich als meine Defaultshell auf allen Systemen die ich derzeit aktiv verwende einsetze. Der Commandeditor fc hat es mir in dieser Shell besonders angetan ganz zu schweigen davon das sie im Vergleich zu anderen Shells ziemlich bugfrei ist.

Für alle nicht vi-User VORSICHT: Diese Config kommt mit aktiviertem vi-Modus daher ;) Außerdem habe ich PS ein wenig blogtauglicher formatiert.

Noch ein Tipp für die Mac-User: die ksh in der Standardinstallation ist ziemlich veraltet. Schnappt euch Macports und installiert sie euch daraus. Danach die neue Shell in die /etc/shells eintragen und sudo chsh -s /opt/local/bin/ksh username und ksh93 ist eure Defaultshell.


set -o noclobber
set -o ignoreeof
set -o globstar
set -o vi

HISTFILE=$HOME/.histfile.$(tty | cut -d/ -f 3)
RED=$(print -n "\033[0;31m")
GREEN=$(print -n "\033[0;32m")
YELLOW=$(print -n "\033[0;33m")
BLUE=$(print -n "\033[0;34m")
PURPLE=$(print -n "\033[0;35m")
CYAN=$(print -n "\033[0;36m")
WHITE=$(print -n "\033[0;38m")

export HOSTNAME=$(hostname)
export EDITOR="vim"
export HISTEDIT="vim"

_checkdir() {
if [[ $PWD == $HOME ]]
then
print -n "~"
elif [[ $PWD == "/" ]]
then
print $PWD
else
print -n ${PWD##*/}
fi
}

if [[ $(uname) == "Darwin" ]]
then
export PS1='${WHITE}[${GREEN}${USER}${WHITE}@${YELLOW}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}$HISTCMD${WHITE}> '
alias ls='ls -FG'
alias pkill='killall'
alias pgrep='ps -A | grep -i'
alias grep='grep --color=always'
elif [[ $(uname) == "SunOS" ]]
then
export PS1='[${WHITE}[${GREEN}${USER}${WHITE}@${CYAN}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}${HISTCMD}${WHITE}> '
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:\
/opt/SunStudioExpress/bin:$PATH"
alias ls='ls -F'
elif [[ $(uname) == "FreeBSD" ]]
then
export PS1='[${WHITE}[${GREEN}${USER}${WHITE}@${PURPLE}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}${HISTCMD}${WHITE}> '
alias ls='ls -FG'
alias pkill='killall'
alias grep='grep --color=always'
alias pgrep='ps -A | grep -i'
fi

alias !!='fc -s -1'
alias vi='vim'

Dienstag, 15. September 2009

Gespiegelt: Festnahme auf "Freiheit statt Angst"

Ich bin so frei und spiegele ebenfalls einen Blogeintrag der dazu führt das diverse Blogs derzeit den Geist unter der Last aufgeben.

Am Wochenende des 11.-13. September 2009 fand in Berlin die Demonstration „Freiheit statt Angst“ statt. Ich war am Freitag gegen Abend in Berlin angekommen und kam am frühen Samstag Mittag mit der U-Bahn am Potsdamer Platz an, von dem aus die Demonstration starten sollte. Beim Betreten des Platzes zwischen Sony Center und Daimler Chrysler City wurde ich von einem Polizisten der Bereitschaftspolizei freundlich angesprochen, ob er einen Blick in meinen Rucksack werfen dürfe. Ich gestattete ihm dies ebenso freundlich. Während er den Inhalt meines Rucksacks untersuchte (eine Regenjacke, eine Wasserflasche) fragte er, ob ich irgendwelche spitzen Gegenstände mit mir führte. Tatsächlich hatte ich – wie immer – mein Letherman Tool, eine Art Multifunktionswerkzeug, im Rucksack. Dies gab ich an und suchte es auf Nachfrage aus dem Rucksack. Ich erklärte mein Letherman dem Polizisten, der das Werkzeug nicht kannte und zeigte ihm auch, dass sich ein Messer zwischen den Werkzeugen befindet. Der Polizist begutachtete das Tool und erklärte mir dann, dass das Mitführen eines Messers auf Demonstrationen nicht erlaubt sei. Er fragte, ob ich das Messer noch schnell nach Hause bringen könnte. Das konnte ich nicht, denn ich bin ja kein Berliner. Der Polizist bot mir daraufhin an, das Messer bei der Polizei vor Ort abzugeben und es nach der Veranstaltung wieder abzuholen. Ich willigte ein.
Gemeinsam gingen wir um die Ecke in die Potsdamer Straße, wo mehrere Einsatzwagen der Polizei standen. Der mich begleitende Polizist erklärte seinen Kollegen, dass ich das Tool abgeben wolle. Der Ton der dort wartenden Beamten war deutlich unfreundlicher, ich wurde abgetastet und sollte meinen Rucksack in einen der Mannschaftswagen stellen. Auf Nachfrage wurde mir gesagt, dass dies aus Sicherheitsgründen geschehe, damit ich keine Waffe aus dem Rucksack ziehen könne. Meinen Personalausweis stellte ich bereitwillig zur Verfügung, um das Ausstellen der Formulare zu erleichtern. Während nun ein weiterer Polizist abseits an einem anderen Wagen die Formulararbeit machte, erklärte der Beamte, der mich ursprünglich angesprochen hatte, seinen Kollegen, dass er das Tool nicht gefunden hätte, sondern dass ich es ihm ausgehändigt hätte, wonach die Behandlung und der Ton mir gegenüber deutlich freundlicher wurde.


Ich erkundigte mich, wo ich das Tool später wieder abholen könne. Ich könne es im “Abschnitt 34″, Alt Moabit 145 wieder abholen, wurde mir mitgeteilt. Dann wurde ich gefragt, ob ich “schon mal Kontakt mit der Polizei” gehabt habe: Nein. Auf Nachfrage, warum mir diese Frage gestellt wurde, sagte mir der Beamte, dass eine routinemäßige Kontrolle über Funk meiner Person erfolgen würde. Kurze Zeit später kam der Polizist mit dem Formular wieder und eröffnete mir, dass über Funk die Order ergangen sei, dass gegen mich eine Anzeige geschrieben werden müsse. Ich war total entsetzt, doch die umstehenden Polizisten versicherten mir, dies sei kein Problem und nur ein formaler Akt; die Staatsanwaltschaft würde das Verfahren voraussichtlich automatisch wieder einstellen.


Meinen Schrecken minderte das wenig, doch als erstes sollte ich das Protokoll über die, wie es mittlerweile hieß, “Beschlagnahme” des Tools unterschreiben, was ich auch tat. Wider Erwarten durfte ich nun nicht zur Demonstration gehen, sondern musste mit aufs Polizeipräsidium kommen, ein Fahrzeug war bereits auf dem Weg, um mich abzuholen. Der Polizist, der mich am Platz angesprochen hatte, registrierte meine aufkeimende Panik und versuchte, mich zu beruhigen. Auch er habe damit nicht gerechnet. Aber er könne nichts tun. Dies sei eine Anweisung “von oben”.


Eine Anweisung von oben war offensichtlich auch der vergitterte Wagen, in dessen Zelle ich eingeschlossen und abtransportiert wurde. Zu diesem Zeitpunkt hatte ich nichts mehr bei mir außer den Durchschlag des Formulars über die Beschlagnahme. Mein Rucksack mit komplettem Inhalt (Handy, Fotoapparat, Schlüssel, Geldbörse etc.) hatte der Beamte in der Fahrerkabine. Ich studierte den Durchschlag: Dort war angekreuzt: Festgenommen. Nun brach ich erstmal vollständig zusammen… Auf Nachfrage, was mir vorgeworfen würde und warum ich festgenommen sei und warum ich in einer Gefängniszelle sitze wurde mir gesagt, dies würde ich auf dem Präsidium erfahren, es sei aber alles nicht so schlimm und festgenommen höre sich viel schlimmer an als es sei.


Der Wagen wollte gerade losfahren, hielt dann aber noch mal wieder an – es sei noch zu einer weiteren Festnahme gekommen und wir müssen noch kurz warten um eine weitere Person mitzunehmen. Der Polizist der bis dahin noch mit hinten im Wagen (außerhalb der Zelle) saß und sozusagen meinen einzigen Ansprechpartner dar stellte, verließ daraufhin das Fahrzeug wieder und ließ mich allein. Total aufgelöst versuchte ich den Beamten vorne im Fahrzeug anzusprechen: was los sei und ob ich noch mal an die frische Luft könne, da mir schlecht sei von der stickigen Luft (und der Situation) sei. Erst nach mehrmalige Ansprache sagte er kurz es ginge gleich weiter und schob das Sichtfenster zwischen Fahrer Bereich und dem hinteren Teil des Wagens zu.


Nach geschätzten 10 Minuten stiegen der Beamte von zuvor, eine Kollegin und ein weiterer scheinbar festgenommener Junge ein Wir fuhren darauf hin los. Nach etwa 10min Fahrt kamen wir an einer PolizeiwWache an und wurden hinein geführt. Nach kurzem Warten vor einer Tür wurden wir herein gelassen und ich wurde in eine Zelle geführt,die Tür wurde hinter mir verschlossen. Kurz Zeit später wurde ich wieder aus der Zelle geholt und sollte mich auf dem Flur vor eine Wand stellen, wo ein Beamter mit einer Digitalkamera Fotos von mir machte. Anschließend wurde ich wieder in die Zelle zurück geführt. Nach geschätzten weitern 10 Minuten wurde ich in einen weiteren Raum geführt, wo zwei Beamten auf mich warteten. Mein Rucksack wurde nun noch mal vollständig entleert und der Inhalt protokolliert. Während dessen fragte mich einer der Protokoll führende Beamte ob ich mit einer Blutprobe einverstanden sei; ich fragte, wozu. Mir wurde erklärt, dies sei eine StandardfFrage für ein Standardformular und es würde jeder gefragt. Darauf verweigerte ich die Entnahme eine Blutprobe formell, was in dem Formular vermerkt wurde.


Im Anschluss wurde ich aufgefordert mich bis auf die Unterhose auszuziehen (das Recht diese doch recht unangenehme Situation verweigern zu können kannte ich zu dem Zeitpunkt leider nicht) und meine Anziehsachen wurden erneut durchsucht. Nach kurzer Zeit erhielt ich sie zurück, durfte ich mich wieder anziehen, musste noch meinen Gürtel und meine Schnürsenkel abgeben und unterschrieb das Protokoll in dem alles was ich bei mir hatte aufgeführt war.


Mein Frage was mir denn nun vorgeworfen würde konnte der Beamte wieder nicht beantwortet: “das wisse er nicht, er sei nur dazu da meine Sachen aufzunehmen”. Ich fragte was den nun passieren würde und er sagte mir, dass ich vermutlich gleich befragt würde und ich dann auch Antwort auf meine Fragen erhalten würde. Ich schilderte den beiden anwesenden Beamten noch mal den Sachverhalt und sie erklärten mir, ich würde bestimmt schnell wieder entlassen, er führe schließlich auch meist sein Taschenmesser mit sich und ich hätte es ja freiwillig abgegeben.


Nach dem ich anschließend wieder in eine Zelle gesperrt worden war, begann das lange Warten. Von Zeit zu Zeit wurde die Tür kurz geöffnet und direkt wieder geschlossen – bei jedem Mal dachte ich, es würde nun endlich weiter gehen und ich würde endlich erfahren, was mir eigentlich vorgeworfen wurde, dem war aber leider nicht so. Als wieder einmal die Tür geöffnet wurde, fragte ich schnell nach der Uhrzeit – es war mittlerweile 16.15 Uhr. Ich saß also mittlerweile seit fast 4 Stunden fest und wusste immer noch nicht, warum. Es muss etwa 17.00 Uhr gewesen sein, als ich endlich aufgefordert wurde, mitzukommen. Meine Hoffnung nun endlich mit einem Ermittler sprechen zu können um den ganzen Sachverhalt aufzuklären, wurde aber leider wieder enttäuscht. Stattdessen wurde in einen Raum, ein Stockwerk tiefer, zum “LKA Berlin Erkennungsdienst” geführt.


Auch den drei Beamten dort schilderte ich unter Tränen nochmals den ganzen Sachverhalt und fragte, ob ich der Erkennungsdienstlichen Erfassung denn wenigstens formell widersprechen könne, da es sich doch ganz klar um ein Missverständnis handele – dies wurde verneint und ein Schild an der Wand wies mich mittels eines Paragraphen darauf hin, dass die Erkennungsdienstlichen Maßnahmen notfalls auch mit Gewalt durchgeführt werden könnten. Ich könne aber mit Hilfe eines Anwalts im Nachhinein der Maßnahme widersprechen, wozu er mir auch raten würde. Meine Frage, wer die Maßnahme angeordnet hätte, wurde mir mit einem Buchstabenabkürzung beantwortet, deren Bedeutung mir die anwesenden Beamten aber nicht erklären konnten oder wollten. Es wurden meine Fingerabdrücke von beiden Händen (alle Finger und komplette Hand), in doppelter Ausführung genommen, sowie erneut Fotos, offensichtlich für die Verbrecherkartei,gemacht.


Zurück in der Zelle betätigte ich nach kurzer Zeit die Klingel, es muss mittlerweile etwa 18.00 gewesen sein, um darum zu bitten meinen Rechtsanwalt anrufen zu können, da ich anfing zu befürchten auch noch die Nacht in der Zelle zuzubringen zu müssen. Wieso hast du das denn nichtvorher gefragt? Kommt hier komisch. Dies konnte der Polizist nicht entscheiden, versprach mir aber, seinen Vorgesetzten zu informieren und ihn zu mir zu schicken. Als nach einer geschätzten halben Stunde immer noch nichts passiert war, schellte ich erneut – ich fühlte mich zu diesem Zeitpunkt schon völlig ausgelaugt und fertig, was man mir auch anzusehen schien, da die Beamtin mit der ich sprach mir sagte es würden „jetzt erstmal die Sanitäter kommen“.


Zum Glück bestätigte sich meine erste Befürchtung, nun auch noch in eine psychiatrische Klinik verlegt zu werden, nicht (nichts erschien mir mehr unmöglich), sondern der Polizeisanitäter holte mich ab und wir gingen in seinen Behandlungsraum. Physiologisch wies ich zu diesem Zeitpunkt eine ausgeprägte Hypertonie (hoher Blutdruck) und einen sehr schnellen Puls auf. Die Vermutung, dass ich vermutlich absolut dehydriert war, schien plausibel, denn außer eine Tasse Kaffe zum Frühstück und einen kleinen Plastikbecher Tee, den ich nach mehrmaliger Nachfrage erhalten hatte, hatte ich den ganzen Tag noch nichts getrunken. Hier kam ich das erste Mal wieder etwas zur Ruhe und hatte das Gefühl als Mensch ernst- und wahrgenommen zu werden. Der Beamte sagte mir dann auch, dass er gehört hätte, dass ich vermutlich in der nächsten Stunde entlassen würde.


Nach einem anschließenden weiteren kurzen Aufenthalt in der Zelle erhielt ich gegen 19.30 tatsächlich alle meine Sachen (bis auf das Letherman Tool) zurück und konnte die Polizeiwache verlassen.


Bis zum heute weiß ich nicht was mir eigendlich vorgeworfen wurde. Meinen Anwalt habe ich bereits kontaktiert und es wird sich wohl in den nächsten Wochen zeigen wie es weiter geht. Mein vorrangiges Ziel ist natürlich mit meinen Fingerabdrücken und meinen Fotos wieder aus der Datei des LKAs heraus zu kommen.


Ich kann sagen, daß die Ereignisse vom Samstag das schlimmste sind was mir in meinem Leben bisher passiert ist. Die Aussage das Freiheitsentzug mit das brutalste ist, was man einer menschlichen Seele antun kann, kann ich voll bestätigen – nie zuvor habe ich mich so ängstlich und hilflos gefühlt.


Das man Angst haben muss, und die habe ich im Moment noch, auf einer friedlichen Demonstartion scheinbar grundlos von der Polizei verprügelt oder verhaftet zu werden, kommt in meinen Augen faktisch einer massiven Einschränkung des Demonstrationsrechts gleich.


Ebenfalls schockierend fand ich wie der Staatsapperat einmal ins Rollen gebracht, nicht wieder zu stoppen war. Persöhnlich kann man wohl kaum einem der Beteiligten der Exekutive einen Vorwurf machen – ein Jeder der Beteiligten konnte sich darauf berufen nur Befehle und Anweisungen ausgeführt zu haben. Diese Argumentation habe ich bisher nur von Angehörigen ehemaliger Unrechtsregimen gehört – ich habe mir eigendlich immer verboten ernsthaft zu glauben, daß so etwas im Rechtsstaat Bundesrepublik Deutschland tatsächlich möglich ist – wurde aber schmerzlich eines besseren belehrt.

Sonntag, 6. September 2009

Bug: Snow Leopard's dynamic_cast und explizit instanziierte C++ Templates

Derzeit arbeite ich an einem Projekt welches ich auf dem Mac (allerdings nicht für den Mac) entwickle. Dabei verwende ich unter anderem auch gerne die RTTI (RunTime Type Information) Fähigkeiten von C++ die mir unter anderem auch sichere Downcasts zur Verfügung stellen (Ist ein Downcast nicht möglich wird der Nullpointer zurückgegeben). Das alles klappt durchaus gut, es sei denn ich schreibe eine Lib in der ich bereits die Templates instanziiere die ich später in meiner Applikation nutzen will. Alles kompiliert zwar wunderbar und das Template lässt sich ebenfalls nutzen sobald ich aber auf Polymorphie zurückgreife wird es hässlich, da anscheinend die Typinformationen verloren gehen und dynamic_cast nicht mehr in der Lage ist richtig zu arbeiten.

Der ganze Fehler lässt sich mit folgendem Testfall reproduzieren:


//TestLib.hpp
class Base {
public:
virtual ~Base() {}
};

template <typename T>
class Derived : public Base {
public:
Derived();
};

/*TestLib.cpp
* compile with: g++ -dynamiclib TestLib.cpp -o libTestLib.dylib
*/
#include "TestLib.hpp"
#include <typeinfo>
#include <iostream>

template <typename T>
Derived<T>::Derived() {
std::cout << typeid(*this).name() << std::endl;
}

template class Derived<int>;

Wie man in der letzten Zeile sieht wird das Template Derived explizit mit int in TestLib.cpp instanziiert. Diesen Typen werden wir jetzt in einer kleinen Anwendung etwas durch die Typhierarchie scheuchen und ein sehr seltsames Verhalten beobachten.

/* main.cpp
* compile with: g++ -L. -lTestLib main.cpp -o main
*/
#include "TestLib.hpp"
#include <iostream>

int main() {
Derived<int>* i = new Derived<int>();
std::cout << typeid(*i).name() << std::endl;
Base *o = i;
std::cout << typeid(*o).name() << std::endl;
std::cout << o << std::endl;
std::cout << dynamic_cast< Derived<int>* >(o) << std::endl;
std::cout << typeid(*o).name() << std::endl;
delete i;
}

Wir erhalten folgende Ausgabe:

7DerivedIiE
7DerivedIiE
0x100100080
0
7DerivedIiE

Die Typid verändert sich nicht und trotzdem liefert ein gültiger Downcast den Nullpointer zurück. Ich habe den Code ebenfalls unter FreeBSD und DragonflyBSD getestet, in beiden Fällen war der Downcast erfolgreich. Meines Wissens tritt dieses Verhalten erst seit Snow Leopard auf, aber da ich derzeit nirgends eine aktuelle Version von Leopard laufen habe kann ich nicht testen ob es sich hier um einen neuen Bug handelt.

Der einzige Workaround der mir derzeit einfällt ist die Instanziierung des Templates in die Compilezeit der Anwendung zu verlegen.

UPDATE: Mal ein delete nachgebessert, nicht das sich hier noch jemand beschwert das mein Testcase leakt :P

Samstag, 15. August 2009

Ein Hackerspace für Münster und Umgebung.

Kaffee ist eine wunderbare Sache, vor allem wenn man ihn trinkt während man Ideen ausarbeitet. Heute war wieder einer dieser Tage. Angestachelt vom CRE zum Thema Hackerspaces hat ein Freund von mir den Entschluss gefasst ein solches Projekt in die Wege zu leiten. Ein Name war schnell gefunden: Warpzone.

Die Grundidee der Warpzone ist es, ein angemessenes Umfeld für kreative Köpfe allen Alters und Geschlechts zu bieten in dem sie sich frei entfalten können. Ein Stück Kultur also. Während so ziemlich jede Subkultur einen Platz hat an dem sie Freitag und Samstag abends rausgeht und sich selbst feiert, sind Nerds und Hacker oft isoliert im stillen Kämmerlein. Das ist hin und wieder schon gewünscht aber sozialer Kontakt wird doch schon mal hin und wieder vermisst und unter Gleichgesinnten ist man oft zu kreativen Leistungen im stande die man selber nicht für möglich gehalten hätte.

Was soll die Warpzone werden? Atmosphäre hat eine ziemlich motivierende Kraft und genau das soll die Warpzone bieten. Wie die C-Base soll sie ihren eigenen Charakter entwickeln und sich mit ihren Besuchern weiterentwickelt. Ihr hab eine Idee wie man das Treiben in der Zone noch verbessern kann? Klasse, such dir ein paar Leute und Gründe eine Initiative die das ganze umsetzt. Außerdem soll mindestens einmal die Woche die ein Vortrag gehalten werden, jeder der etwas zu erzählen hat und etwas präsentieren will, sei es eine Neuentdeckung die man umbedingt bekannter machen will oder ein Projekt das man selber an den Start gebracht hat. Bringt euch ein und erschafft etwas!

Was soll die Warpzone nicht werden? Sie soll kein Stammtisch werden in der man sich ein oder zweimal im Monat trifft und redet was man denn alles so gemacht hat. Das kann man im Zweifelsfall auch in einer Kneipe. Sie soll kein dröger Raum mit ein paar Stühlen sein in der in Redner an einem Flipchart stundenlang referiert. Wer die Warpzone betritt verlässt die normale Welt.

Nun handelt es sich bei einem solchen Projekt um ein aufwändiges Unterfangen, braucht man doch Räumlichkeiten, Möbel und einfach angemessene Infrastruktur (Nerds brauchen Netz und Werkzeug). Vor allem brauchen wir aber erst einmal Leute und Ideen mit denen sich ein solches Projekt durchziehen lässt. Im Moment sind wir zwei und die Idee ist gerade mal ein paar Stunden alt. Aber bereits eine Menge Input der sich bereits realisieren lässt, jetzt fehlst nur noch DU!

Ernsthafte Interessenten erreichen mich am besten über Jabber oder Twitter (siehe mein Profil). Also meldet euch und schafft ein Stück Hackerkultur im kreativen Vakuum ;)

UPDATE: Wir habe inzwischen einen Chatroom auf irc.freenode.org #warpzone und eine Mailing Liste

Freitag, 14. August 2009

Auch ich leiste meinen Beitrag

Auch wenn ich der Partei nicht angehöre, konnte ich einem Remix des Plakates nicht widerstehen :D

Sonntag, 9. August 2009

Podcasts und Chaosradio Express

Heute will ich mal nicht von irgendetwas technischem schreiben sondern mich mal mit dem Medium Podcast befassen, genauer mit Chaosradio Express, einem "Spin-Off" der Mutter aller deutschen Nerd-Podcasts: dem Chaosradio. (vor allem da wir Tim damit bestechen sollen Folgen zu releasen :D)

Für mich selber wurde CRE eine ansprechende Alternative als es im original Chaosradio immer mehr um das Thema Überwachung und Politik ging. Versteht mich nicht falsch, das sind wichtige Themen, aber auf Weg in die Stadt oder im Zug hab ich ganz einfach auch mal gerne etwas was mich nicht total aufregt sondern "weiterbildet" (den Wutclown kann ich auch zuhause noch prügeln ^^).

CRE ist für mich ein Ansporn mich mit Sachen zu befassen auf die ich oft selber gar nicht so ohne weiteres komme, sei es nur weil das Lesen von Dokumentation in vielen Fällen einfach zu mühselig ist. Der Mensch ist halt ein faules Tier.

Was gefällt mir besonders gut an CRE? In erster Linie sind es die sehr technischen Themen. Meistens im Bereich Betriebssysteme oder Programmiersprachen (jeder der mich kennt weiß das ich da schnell in Sammelwut verfallen und teilweise schon selber die Übersicht verliere ^^). Hier bietet CRE eine ziemlich reichhaltige Sammlung auch an etwas esoterischeren Themen wie z.B. der Sprache Dylan (von der ich bis heute keinen lauffähigen Compiler gefunden habe -_-). Ein besonderes Highlight war für mich der C++ Podcast mit Pavel Mayer, vor allem wegen der grandiosen Buchtipps (mehr davon! Ich bin süchtig nach Fachliteratur!). Auch sehr spannend war der Podcast über FreeBSD. Ich muss zu meiner Schande gestehen das ich mich mit BSD erst befasst habe als sich einige wenige in der Linuxwelt gegenüber ZFS (gibt es auch einen CRE zu ;) in meinem Augen ziemlich blöd verhalten haben (Erläuterung was ich damit meine bitte in den Kommentaren nachlesen;) ). CRE hat mir hier eine sehr schöne Einführung in die BSD Welt gegeben.

Was verspreche ich mir von CRE? In erster Linie ist es Futter fürs Hirn wenn meine Hände mit etwas anderem beschäftigt sind (trainieren oder einfach unterwegs sein). Ich möchte mich am liebsten permanent weiterbilden und das überall wo ich bin. Podcasts bieten dort eine Möglichkeit Neugierde auf bestimmte Themen zu machen oder einen einfach mal in die richtige Richtung zu schubsen wenn man selber den Wald vor lauter Bäumen nicht sieht. (You are doing it WRONG!). Auch bieten sie einem ein gewisses Gefühl an Zugehörigkeit, man sieht halt das man mit seiner Nerdigkeit nicht ganz alleine ist. Ein Gefühl was man auf dem Lande gerne mal bekommt ^^. Sie sind ein Sprachrohr unserer Kultur, einem Haufen Coder, Admins und Katzenliebhaber. Vor allem woher diese Katzenbilder eigentlich kommen war mal sehr interessant zu erfahren (auch wenn ich den Podcast im Fitnessstudio gehört habe und im Fernsehen gerade eine Raubkatze eine Kürbis verspeist hat... ich glaube ich habe selten so doof gegrinst...i can haz pumpkin?).

Für die Zukunft würde ich mir sicher noch mehr technisches Zeug wünschen, das Problem ist da aber sicherlich das es auch an geeigneten Leuten gibt. Klar könnte ich mich mit Tim in einen Raum setzen und 2 Stunden über OpenSolaris quatschen, aber ob das Endresultat jetzt so brauchbar wäre stell ich einfach mal dahin. Oft sind es auch Podcasts die man gar nicht so auf dem Schirm hatte die einen begeistern, wie z.B. über das Thema Kaffee. Plötzlich rennt man von einem Laden zum anderen und wundert sich warum man das nicht schon viel früher gemacht hat. (Auch wenn ich immer noch kein schlechtes gewissen habe diese Instant Trinkpisse von Ja! zu trinken ^^)

So. Ich habe keine Ahnung ob das Bestechung genug ist. Ich habe wieder mal das Gefühl von Hölzchen auf Stöckchen gekommen zu sein und nur um den heißen Brei geredet zu haben. Aber bei Texten ohne geschweifte Klammern tu ich mich manchmal sehr schwer ^^.



Erm... Pic unrelated!

Dieses war der erste Streich, doch der ZWEITE folgt sogleich! (Incoming Blogkette FTW!)
Und "previously on Lo... erm Blogkette". Der Blogpost mit dem alles angefangen hat!

Montag, 20. Juli 2009

C Funktionen aus C# rufen

Für mich ist es immer wichtig das Sprachen nicht isoliert dastehen. Ich möchte von jeder Sprache oder Laufzeitumgebung ungehindert mit dem System kommunizieren. Da ich mich meistens auf diversen UNIX Systemen herumtreibe ist das größtenteils C. Gerade im Moment hat es mir C# ein wenig angetan und auch hier kann man ohne weiteres mit dem System schnacken. Darum hier mal ein kleines Beispiel das eventuell dem ein oder anderen weiterhilft. Das ganze wurde auf MacOSX mit Mono getestet läuft aber genauso gut unter *BSD und Linux.

Als erstes legen wir eine kleine Library an die die Funktion enthält die wir später aufrufen wollen.

//compile with gcc -dynamiclib test.c -o test.dylib
#include

int test(const char* s) {
printf("Printing from C: %s\n",s);
return 666;
}

Nichts dramatisches, unser Programm soll lediglich etwas Text übernehmen ausgeben und einen Integer an unser C# Programm zurück liefern. Nach dem kompilieren erhalten wir eine dynamische Bibliothek mit Namen test.dylib.

Unser C# Code ist ähnlich spektakulär aufgebaut:

using System;
using System.Runtime.InteropServices;

class PTest {
[DllImport("test.dylib")]
public static extern int test(string s);

public static void Main() {
Console.WriteLine(test("this is a test"));
}
}

Eine interessante Anmerkung nebenbei: test.dylib muss zum Zeitpunkt der Übersetzung nicht existieren.

Jetzt ist man also ohne weiteres in der Lage mit Libs wie z.B. libzfs oder libdtrace von C# aus zu kommunizieren um stark integrierte (aber logischerweise nicht mehr plattformunabhängige) Applikationen zu schreiben.

Samstag, 11. Juli 2009

"Spielt nicht mit Schmuddelkindern!"

Die Junge Union ist entrüstet über den Zuspruch den die Piratenpartei unter Studenten findet, spricht gar von einem Mangel an Werten. Es muss weh tun wenn man keiner mehr mit einem spielen will.

Sonntag, 28. Juni 2009

Elektronische Revolutionen: Mit TOR gegen Zensur

Gerade in den letzten Wochen macht vor allem ein Thema immer wieder die Runde: Zensur. Andere Länder leiden bereits unter ihr und unsere Regierung ist nun auch fröhlich dabei Stück für Stück eine solche Infrastruktur zu errichten und gleichzeitig aber Länder zu verurteilen die diese bereits haben.

Des weiteren werden wir im Moment auch Zeuge eines Volksaufstandes wie wir ihn noch nie in der Geschichte der Menschheit erlebt haben. Die Bevölkerung des Iran erhebt sich gegen das Regime und nutzt das Internet als Medium der Kommunikation in die ganze Welt. Da gerade der Iran über Kontrolltechnologien verfügt die wir uns in unseren wüstesten Albträumen nicht wünschen würden brauchen diese Menschen einen Weg diese Sperren zu umgehen. Einer der prominentesten ist sicherlich The Onion Router, ein anonymisierendes Netzwerk welches es Menschen ermöglichet Zensur zu umgehen und Information aus oder einzuschleusen. Das schöne an TOR ist: jeder kann praktisch mitmachen und ich will hier mal 3 Methoden vorstellen wie das geht.

Relays

TOR besteht aus vielen Knoten die Daten untereinander weiterleiten. Die Verbindung zwischen diesen Knoten ist in TOR komplett verschlüsselt und lässt praktisch kaum Rückschlüsse auf Absender und Ziel zu (sicher ist dies mit einem hohen technischen Aufwand auch zu bewerkstelligen). Ein solches Relay ist relativ einfach zu konfigurieren und spendet dem Netzwerk Bandbreite. Wichtig ist hierbei das von einem Relay aus keine Verbindung aus dem TOR Netzwerk heraus aufgebaut werden kann (man hat also nicht zu befürchten das kriminelle Inhalte durch ein Relay aufgerufen werden).

Eine Konfiguration für ein Relay wäre z.B. folgende:


SocksPort 0
DirPort 443
ORPort 80
ExitPolicy reject *:*


Das ganze lässt sich einfach über tor -f /pfad/zur/config starten. Man sollte allerdings sichergehen das DirPort und ORPort durch die Firewall erreichbar sind. (Protip: TOR als Solaris Zone ;) ). Mehr Infos zu Relays findet man auch auf der TOR Seite. Die ExitPolicy sichert das man von diesem Knoten aus das TOR Netzwerk nicht verlassen kann, diesen Eintrag sollte man auf keinen Fall weglassen wenn man sich nicht genau der Konsequenzen bewusst ist. Mehr dazu im Abschnitt über Exit Nodes.

Bridges

Diese speziellen Relays werden "geheim" gehalten. Da Regierungen gerne mal Zugangspunkte zum TOR Netzwerk blockiert verlangt es nach Zugangspunkten die in keiner Liste auftauchen. Durch diese kann man dann anonym ins Netz kommen um z.B. brisantes Material aus Krisengebieten herauszuschleusen. Anhand eines Fingerprints kann man sich mit solch einer Bridge verbinden.


SocksPort 0
ORPort 443
BridgeRelay 1
Exitpolicy reject *:*


Es gibt unter anderem eine Initiative die sich dafür einsetzt TOR Bridges für den Iran bereitzustellen.

Exit Nodes (VORSICHT!)

Diese Dinger sind nicht ganz ohne. An einem Exit Node wird das TOR Netzwerk verlassen und es werden Verbindungen ins unverschlüsselte Netz aufgebaut. Hierbei kann es sich auch um strafbares Material handeln, wer also nicht umbedingt unangemeldeten Besuch von der Polizei haben möchte sollte sich absichern oder halt darüber im klaren sein was hier passiert. Um einen Exit Node einzurichten entfernt man lediglich die Exit Policy aus der Relay Konfiguration. Ich übernehme keine Verantwortung für entstehende Schäden. YOU HAVE BEEN WARNED!Auch wenn die Beschlagnahmung eines TOR Servers in der Regel nichts bringt da keine verwertbaren Daten anfallen, sollte man sich nicht umgedingt darauf verlassen das dies als Argument gilt die Maschine nicht mitzunehmen.

Relay oder Bridge? Was hilft am meisten und wann?

Diese Frage habe ich mir zu Anfang auch gestellt. Bridges sind sehr wichtig, allerdings bringt es nicht viel dies vom heimischen DSL Anschluss aus zu machen, da deutsche Provider innerhalb von 24 Stunden die Netzverbindung kappen. Hat man allerdings das Glück eine feste IP zu haben oder einen Anbieter ohne 24h-Disconnect sollte man sich überlegem eine Bridge aufzusetzen. Bridges fressen im allgemeinen recht wenig Bandbreite, Relays hingegen stehen eigentlich permanent unter Strom und verteilen Daten, es ist also nicht unklug den Transferrate etwas anzupassen wenn man nicht komplett auf seine Verbindung verzichten will. Dies geht über z.B. folgende Konfigurationseinträge:


RelayBandwidthRate 50 KBytes
RelayBandwidthBurst 200 KBytes


In meinen Augen ist TOR ein immer wichtiger werdendes Netzwerk das es Menschen ermöglicht sich über staatliche Willkür hinwegzusetzen und eventuell sogar Leben zu retten oder gar ganze Regierungen zu stürzen. TOR wird heute schon genutzt um die Chinesische Firewall zu umgehen und wird hoffentlich immer mehr Menschen die in Unterdrückung leben die Möglichkeit geben sich Gehör zu verschaffen.



Dienstag, 16. Juni 2009

LLVM: Neue Compiler braucht das Land!

In letzter Zeit macht die Low Level Virtual Machine immer mehr von sich Reden. Blöderweise ist der Name doch ein wenig verwirrend und man denkt schnell an die Java VM oder dergleichen. In Wirklichkeit handelt es sich um ein Compilerframework (und eine eigene Sprache) welches einem sehr interessante Möglichkeiten eröffnet. Apple verwendet LLVM unter anderem um OpenCL zu realisieren.
Was mich besonders an LLVM interessiert sind vor allem die Möglichkeiten zur Analyse von Fehlern die es bietet. Hier mal gcc und clang (ein C/C++/ObjC Frontend für LLVM) im Vergleich.

$ gcc-4.2 -fsyntax-only t.c
t.c:7: error: invalid operands to binary + (have 'int' and 'struct A')
$ clang -fsyntax-only t.c
t.c:7:39: error: invalid operands to binary expression ('int' and 'struct A')
return y + func(y ? ((SomeA.X + 40) + SomeA) / 42 + SomeA.X : SomeA.X);
~~~~~~~~~~~~~~ ^ ~~~~~

Clang nagelt den Fehler auf Zeile UND Spalte fest, nebenher verbraucht er zum kompilieren auch noch weniger Speicher und ist auch noch schneller. Ziemlich beeindruckend.

LLVM wird sicherlich den Compilermarkt in der Opensource Welt nachhaltig verändern. So gibt es z.B. Ambitionen FreeBSD komplett mit Clang anstelle von GCC zu übersetzen.

Auch die Rubyfraktion will von LLVM profitieren und so experimentiert das MacRuby-Projekt ebenfalls mit LLVM um Ruby auf dem Mac zu beschleunigen.

Für alle die jetzt neugierig geworden sind gibt es hier einen interessanten Tech Talk zum Thema, genauso wie einen Podcast vom Chaosradio Express

Stoppschild für die SPD

Ich wollte eigentlich politischen Content auf diesem Blog außen vor lassen, aber die derzeitige politische Lage veranlasst mich dazu. Die SPD winkt das Zensurgesetz der CDU brav durch wie es sich schon angedeutet hat. Ich für meinen Teil sehe beide Parteien somit für diese Bundestagswahl als unwählbar an. Meine Stimme wird weder die Stasi CDU noch die Kohlekumpel und BILD-Leser SPD kriegen.

Montag, 15. Juni 2009

Vortrag: LDC - ein D Frontend für LLVM

Im Moment bin ich extrem auf der Suche nach einer modernen Sprache mit der sich ein elegantes Framework für das Programmieren von Applikationen realisieren lässt (schon frustrierend wie wenig der Markt da wirklich bietet, vor allem wenn es darum geht auch auf exotischeren Plattformen zu laufen). D hat einige interessante Ansätze die die Probleme vieler Sprachen löst. Mit LDC stehen jetzt auch die Chancen gut diese Sprache auf weitaus mehr Plattformen zu bringen als bisher, darum habe ich hier mal einen kleinen Vortrag verlinkt der das Projekt erklärt. Leider ist die Tonqualität ziemlich schlecht aber man kann es gerade noch so aushalten.

LDC from Tom Stachowiak on Vimeo.

Mittwoch, 10. Juni 2009

Vortrag: Inside the Mac OS X Kernel

Diesen Vortrag wollte ich eigentlich schon vor lange Zeit mal verlinken, aber irgendwie habe ich das immer verschwitzt. Sollte sich jeder mal ansehen der sich für Kernel Designs interessiert. Vor allem die Mach IPC und IOKit sind wirklich einen Blick wert.

Donnerstag, 23. April 2009

Programmierung: Ein kleiner Einblick in D

Jeder der sich schon mal mit C++ befasst hat kommt irgendwann mal an den Punkt an dem er denkt "Oh man geht das nicht auch einfacher?". Fakt ist: Kaum eine Sprache ist so schwer zu lernen und so aufwändig durch den Compiler zu kriegen wie diese, dazu kommen noch einige C Altlasten und vor allem der Preprozessor. Oft ertappt man sich dabei möglichst trickreich die Sprache aus den Angeln zu hebeln (mir fällt da spontan das sizeof Voodoo ein um zur Compilezeit herauszufinden ob ein Cast gemacht werden kann oder nicht). Viele dieser Tricks basieren auf ausgefuchsten C++-Templates und gerade die sorgen bei vielen Programmierern für spontanes "schreiend im Kreis rennen" (schon mal mit Typelists gearbeitet? :P). Hier springt D von Digitalmars in die Bresche, oder versucht es zumindest. Ein paar Highlights möchte ich hier beleuchten.

Keine Rückwärtskompatibilität

Was in C++ Anfangs noch Mittel zum Zweck war ist inzwischen zu einem unangenehmen Anhängsel geworden. Vielen geht schon beim Anblick eines const char* die Sause geschweige denn der ganze Mist den Arrays mit sich schleppen. Vieles davon bessert die STL schon lange nach (std::string und std::vector sei dank) ein wenig übel ist der Nachgeschmack dennoch... zumindest für mich ;). Besonders "schön" ist da vor allem der Preprozessor hat er doch keine Ahnung was es mit der Sprache auf sich hat und setzt nur fröhlich irgendwelche Markos oder Definitionen ein. Entscheidungen die zur Compilezeit getroffen werden gehen an im vorbei da er ja schon lange fertig ist wenn es zur Sache geht. Hier kommen dann bei C++ die Templates zum Schuss and genau dort wird es für viele kompliziert. D bietet hier ein eigenes Sprachmittel: static if.

import std.stdio;

class A {}
class B : A {}
class C {}

void main(string[] args) {
static if (is(B : A)) {
writefln("B erbt von A");
} else {
writefln("B erbt nicht von A");
}
static if (is(C : A)) {
writefln("C erbt von A");
} else {
writefln("C erbt nicht von A");
}
}

Ohne große Umwege lässt sich hier das Gewünschte ausdrücken. Ein Preprozessor würde hier versagen da er keine Ahnung von Sprachmitteln wie Vererbung hat, man wäre also auf C++-Template Voodoo angewiesen, hier ist schon alles in der Sprache drin.

Besonders Templates wurden in D stark überarbeitet, da gerade hier sich Schwächen auftuen die zu sehr großen Problemen führen können. Das ganze Elend fängt schon bei der Syntax an. Da die Spitzen Klammern die in C++ verwendet werden auch irrtümlicherweise als größer oder kleiner-Operatoren angesehen werden können (in solchen Situationen muss man dem Compiler meist noch unter die Arme greifen). D benutzt hier eine etwas gewöhnungsbedürftige Syntax die allerdings diese Probleme umgeht da sie einen Operator verwendet der im Normalfall nur unär ist hier aber binär verwendet wird, nämlich den !-Operator.

import std.stdio;

template Foo(T) {
T a = 666;
}

void main(string[] args) {
alias Foo!(int) tmp;
writefln("%d",tmp.a);
}

Hier taucht auch gleichzeitig eine andere Besonderheit von D auf, das alias. Dieses Schlüsselwort macht eigentlich nichts anderes als das was wir von C/C++ kennen, denn im Gegensatz zu diesen Sprachen verfügt D über echte Typedefs die auch überladen können.

import std.stdio;

typedef int bla;

void test(int a) {
writefln("int: %d",a);
}

void test(bla a) {
writefln("bla: %d",a);
}

void main(string[] args) {
int a = 666;
bla b = 777;
test(a);
test(b);
}

Eine andere Kleinigkeit die bei unserem Template Beispiel aufgefallen ist, ist das es sich bei diesem Template weder um eine Template-Klasse noch um eine Template-Funktion handelt. Es ist einfach nur ein Template. Das bietet eine weitere Interessante Möglichkeit, nämlich Mixins.

import std.stdio;

template Foo(T) {
void test() {
writefln("Foo.test");
}
}

class Test {
public {
mixin Foo!(int);
}
}

void main(string[] args) {
Test t = new Test;
t.test();
}

Ein nicht ganz so offensichtliches Feature ist hier der Garbage Collector und der Fakt das hier nicht mit Pointern (keine Sorge die gibt es auch noch) sondern mit Referenzen gearbeitet wird wenn eine Klasse instanziiert wird. Hier scheiden sich sicherlich die Geister denn was bei Systemprogrammierung durchaus Sinn macht, kann beim Programmieren von Applikationen schnell zur Katastrophe werden und in wirklich scheusslichen Speicherlecks enden (oder pro-aggressiven Einsätzen von auto_ptr, shared_ptr und Konsorten).

Was auch sehr viel Spass macht ist das Wegfallen von Forward-Declarations. So geht z.B. folgendes:

import std.stdio;

void foo() {
bar();
}

void bar() {
writefln("foobar");
}

void main(string[] args) {
foo();
}


Kritikpunkte

D ist eine tolle Sprache und räumt mit einigen Sachen auf die bei C++ zu Verwirrung oder schlechtem Programmierstil führen auf. Dennoch ist die Unterstützung der Sprache noch mehr als dürftig da es im Endeffekt nur sehr wenige Compiler für sie gibt die im Grunde alle auf dem DMD von Digitalmars basieren. Auch fehlen mir einige In-Depth Einblicke die in für C++ zu Hauf gibt und gerade auf der Low-Level Seite von mir schmerzlich vermisst werden (bei Nachfrage wird man dann auch gerne mit der Standardantwort "read to code" abgefrühstückt). Auch ist die eine Aufspaltung der D Community durch 2 unterschiedliche "Standard"-Bibliotheken mehr als offensichtlich und auch nervig (Flamewars gibt es wirklich schon genug). Während ein Compiler Phobos nutzt kommt der andere nur mit Tango daher. Derzeit wird auch an D2.0 herumgeschustert und man kriegt langsam das Gefühl als werde auch diese Sprache immer überladener. Dennoch ist die Sprache so entworfen das einem nicht gleich pfundweise Fehlermeldungen um die Ohren geschleudert werden da gerade auf obskure veraltete Syntax verzichtet wurde. Für alle die aber etwas gesucht haben das so schnell wie C/C++ ist und mit viel vom Java/C# Komfort daherkommt ist diese Sprache sicherlich mal einen Blick wert. Java? Ja, D verzichtet unter anderem auf Multivererbung und setzt dafür auf Interfaces. Auch Schlüsselwörter wie final, abstract und synchronized sind oft einfach hilfreich wenn es darum geht schnell und leserlich das auszudrücken was man meint.

Das hier sind nur ein paar sehr kleine Details von dem was D ausmacht und bei weitem noch nicht alle. Sollte Interesse bestehen kann ich gerne auch noch etwas auf Details eingehen (vor allem Closures dürften dein ein oder anderen sicher interessieren, das sprengt hier aber glaub ich etwas den Rahmen ^^).

Samstag, 18. April 2009

Twitscher twitscher!

Aufgrund chronischem Spieltriebs hab ich mich einfach mal dazu entschlossen mich bei Twitter anzumelden. Da ich immer mal wieder Links finde die ich für mehr oder weniger für interessant erachte (und es irgendwie sinnlos ist jedesmal einen Blogartikel drüber zu schreiben) gibts die jetzt unter meinem neuen Twitteraccount. Follow me.... i know where they hide their cookies!

Mittwoch, 25. März 2009

C++: ABI zur Laufzeit entwirren

Die C++ typeinfo ist ja immer so eine Sache. Einige Compiler entwirren die Namen, andere wieder nicht. G++ gehört zu den Compilern die das nicht von sich aus machen, aber man kann sich leicht Abhilfe schaffen.

#include <typeinfo>
#include <iostream>
#include <cxxabi.h>

#define HAVE_CXA_DEMANGLE

#ifdef HAVE_CXA_DEMANGLE
const char* demangle(const char* name)
{
char buf[1024];
unsigned int size = 1024;
int status;
char* res;
res = abi::__cxa_demangle(name,
buf,
&size,
&status);
return res;
}
#else
const char* demangle(const char* name)
{
return name;
}
#endif

int main()
{
std::cout << typeid(std::cout).name();
std::cout << std::endl;
std::cout << ::demangle(typeid(std::cout).name());
std::cout << std::endl;
return 0;
}

/* Ausgabe :
[raichoo@sparkster:~]> ./a.out
So
std::ostream
*/

Sonntag, 15. Februar 2009

Haiku: A blast from the past

Ich hab ja schon immer gerne mit Betriebssystemen der unterschiedlichsten Art rumgespielt und vor vielen Jahren bin ich auch mit BeOS in Berührung gekommen. Leider war die Liebe nicht von langer Dauer da Be irgendwann Geschichte war und damit auch dieses wunderbare Betriebssystem. Es war schon unglaublich was man damals aus einer Kiste an Performance rausholen konnte. Viele Systeme ächzen heute noch und dem was BeOS damals schon geleistet hat, und zwar auf weitaus schlechterer Hardware als heute. Umso mehr habe ich mich über das Projekt Haiku gefreut das es sich zur Aufgabe gemacht hat ein freies BeOS zu entwickeln. Was es mir besonders angetan hat ist die reichhaltige API. Keine kilometerlangen Abhängigkeitslisten mehr Haiku bietet alles was man braucht in sogenannten Kits. Alles ist sehr stark integriert und greift wunderbar ineinander. Vor allem der einheitlich Desktop hat seine Vorteile. Während Projekte wie KDE und Gnome darauf ausgelegt sind auf möglichst vielen unterschiedlichen Systemen zu laufen hat Haiku "nur" eine Oberfläche welche sämtliche Vorteile des darunterliegenden Systems nutzen kann. Dies ist bei anderen Desktop nicht ohne weiters mögliche da sie sonst ihre Portierbarkeit verlieren würden. Ein weiterer Vorteil ist das das starten von Applikationen einfach rasend schnell wird. Wer gerne mit Systemen herumspielt sollte auf jeden Fall einen Stop bei Haiku einlegen. ;)

Freitag, 9. Januar 2009

Testphase für 2009.04 hat begonnen

Mit der Veröffentlichung von Build 105 für OpenSolaris geht es jetzt los mit der Entwicklung für den nächsten Release der Distribution, um auf das Developer Repository zuzugreifen genügt der folgende Befehl:


$pfexec pkg set-authority -O http://pkg.opensolaris.org/dev opensolaris.org


Mit Build 105 wird ZFS auf die neuste Version 14 gebracht (Vorsicht: ein Upgrade führt dazu das ältere Versionen und BEs von OpenSolaris nicht mehr auf die Daten zugreifen können!), des weiteren wird die NIC-Virtualisierung Crossbow eingeführt mit der es möglich ist komplette virtuelle Netzwerkkarten (inklusive eigener MAC-Addresse) zu erstellen.