Fyra snabba

Det verkar som jag är inne i en bloggningsperiod. Men långa
utläggningar har jag inte tid med, jag måste korta ner en
Techworld-krönika från (just nu) 4356 tecken till 2600 innan jag får
gå och lägga mig. Vi får ta det snabbt:

Kort är det nya svarta: Det började med jQuerys fokus på att förkorta vanliga
javascriptidiom till en eller ett par tokens, fortsatte med Paul
Grahams sneak preview på Arc och dess galet kompakta
uttrycksfullhet
, och idag liknar Steve Yegge babbliga
programmerare (och språk) vid tvååringar.
Juristmetafor: EG-rätt = Java, Handelsbalken = Lisp.

Lagar och kod: En sak som är lite frustrerande är att jag efter tre
års juriststudier fortfarande inte har bra svar på varför lagen är så
svårtolkad och oförutsägbar. Precis i början av studierna, när jag
fortfarande utgick
från det tankesätt som jag tillägnat mig som programmerare
,
undrade jag om man inte kunde ha nån sorts enhetstester för
paragraferna, så att man kunde utvärdera om lagen uppfyllde de syften
den skapats för. Bennet Haselton har utvecklat
ett förslag
längs samma linjer som han tror skulle kunna lösa de
problem han stött på i amerikanska
underrättsdomstolar. Problemställningen saknar helt uppenbart inte
verklighetsförankring, men är det en bra lösning? More to the point,
är det en genomförbar lösning? Jag drar paralleller till den
kurs jag läser just nu
, och dess diskussioner om olika
rättskällors legitimitet. Den rättskälla som för de flesta är the
rättskälla, lagstiftningen, behöver bara ha en yttre legitimitet (vara
utfärdad av någon med folkets eller vapenmaktens mandat) — en
eventuell inre legitimitet (i betydelsen fungerande systematik,
exakthet, logisk konstistens, fullständighet) är bara en
nice-to-have. Åtminstone så länge avsaknaden av inre legitimitet inte
har någon bäring på den yttre legitimiteten (dvs så länge väljarna
inte kräver lagstiftning vars faktiska utformning är begriplig).

Ska vi ha bättre spärrar — eller inga? Utredningen Musik och film på
internet – hot eller möjlighet? (Ds 2007:29)
, med dess förslag att
ålägga ISP:er att stänga av fildelare, har väl (milt sagt) inte blivit
så väl mottagen i bloggosfären, och har även blivit mer
genomgående kritiskt granskad
. På andra sidan Atlanten ställs
också krav på att ISP:er ska ”ta sitt ansvar” för att hejda olaglig
fildelning. Nicholas Weaver föreslår, på bästa code-is-law-manér, en
bittorrentspecifik lösning för att spärra just bara den olagliga
fildelningen, som han menar är en mer ändamålsenlig lösning som
minimerar ”collateral damage”. Min spontana tanke är att en sådan
spärrning – om den implementeras – kommer att påskynda utvecklingen av
mindre darknets
som är ännu svårare att övervaka eller stoppa. Och gör existensen av
en mer ändamålsenlig (”bättre”) spärr det svårare att argumentera för
ett övervaknings- och filtreringsfritt Internet?

Alla måste läsa: Kevin Kelly, Better
Than Free
.

Slutligen: Hela förra veckan gick tankeverksamheten på
halvfart. Inte bra när man har mycket att göra. Så jag fick jobba sent
och hann inte ut och springa något. Igår snodde jag åt mig några
timmar och körde nästan en halvmara runt
kungsholmen och söder
. Idag har jag haft träningsvärk och ett helt
fantastiskt flyt på tankarna. Lärdom (som jag lyckas glömma bort då
och då): Träning är inte en hobby man kan göra i mån av tid, utan en
förutsättning för att man ska orka med allt annat. Ungefär som frukost
(fast svettigare).

Oj, det blev visst fem snabba. Jag är så otroligt busy att jag inte hinner kontrollräkna.

Demokratiska aspekter på lagarnas utformning

I den här diskussionstråden framför dammskog tesen att enda anledningen till att språket i lagarna inte skrivs om är att de juridiskt utbildade ska kunna behålla makten. Jag kan inte riktigt hålla med. Med tanke på hur mycket tankemöda det lagts genom åren på att uttolka alla aspekter av uttryck som ”påtvingat kroppsligt ingrepp” eller ”oskäligt med hänsyn till avtalets innehåll, omständigheterna vid avtalets tillkomst, senare inträffade förhållanden och omständigheterna i övrigt” så finns det en stabiliserande faktor i att behålla gammal lagtext – precis som ett väldebuggat program så har man stor empirisk vetskap om hur den funkar, även om den kanske inte är lättbegriplig vid en första anblick.

Men kritiken är ändå berättigad. Det är ett demokratiskt problem om medborgarna inte kan förstå reglerna för hur samhället fungerar. Som tidigare nämnts så lusläser jag för närvarande grundlagarna, framförallt regeringsformen, och det är anmärkningsvärt hur svårlästa våra mest grundläggande samhällsregler är.

För att ta ett exempel: Får man anordna ett demonstrationståg? RF 2:1 säger, utan några som helst förbehåll, att, ja, det får man. Men så enkelt är det inte; man måste läsa vidare till RF 2:12, där man ser att den här rättigheten kan begränsas genom lag (dvs riksdagen, inte regeringen, kan bestämma det). Får riksdagen begränsa den hur den vill — har vi en majoritetens diktatur vad gäller demonstrationer? Nej, det finns grundlagsskyddade gränser (i RF 2:12 st. 2 och 2:14) för hur långt den här begränsningen kan gå. Vi har alltså en begränsning för hur mycket en majoritet kan begränsa något som är en grundläggande frihet. Inget av detta anas i RF 2:1, man måste läsa hela kapitlet för att inse det.

Och det var ett enkelt exempel. Sidorna med RF i min lagbok är numera fullklottrade i marginalen med korsreferenser mellan paragrafer, även till andra lagar som Riksdagsordningen, tryckfrihetsförordningen, brottsbalken med flera. Kunskap som att när man läser RF 11:9 st. 2 så måste man ha sista delen av RF 2:16 i färskt minne, och att man i sin tur måste ha läst övergångsbestämmelse 2 till lagändringen SFS 1976:871 för att kunna tolka den rätt i alla situationer (och vi ska inte ens tala om vad EG-rätten, som har företräde över svensk rätt, ställer till för problem när vi ska tolka ovanstående).

Så, vad kan man göra? Jag vänder mig, återigen, mot programmeringsvärlden för inspiration. Det finns två principer för bra programmering som ibland konflikterar mot varandra, men som är värda att tänka på. Den första är att olika delar i ett komplext program ska vara så oberoende av varandra som möjligt – de ska helst kommunicera genom minimala välspecificerade gränssnitt, och utöver dessa vara som ”svarta lådor” gentemot varandra. En del ska helt enkelt varken behöva eller ens få tillgång till väldigt specifika egenskaper hos en annan del. Den andra är att funktionalitet för att göra en viss sak ska finnas på ett och endast ett ställe. Om programmet ska föra en journal/logg över allt det företar sig, ska instruktionerna som faktiskt skriva tecken till loggfilen finnas på ett och endast ett ställe. Det innebär, i det här exemplet, att loggningsfunktionerna måste vara en del av det välspecificerade gränssnittet för minst en komponent, vilket motverkar dess minimalitet (Aspect-oriented programming är ett nytt synsätt på programmering och abstraktioner som bland annat motverkar den här konflikten).

Lagtext i allmänhet bryter ofta mot den första av ovanstående principer. Framförallt är det vanligt med COME FROM-liknande konstruktioner, där en paragrafs innehåll kan påverkas av en helt annan paragraf, utan att det ens antyds i den första paragrafen. Även den andra principen bryts det friskt mot — jämför brottskatalogen i TF med brotten i BrB, och begrunda vad som kan hända när de två listorna skiljer sig.

Återigen kanske det finns något som juridiken, med sina tusenåriga anor, kan lära sig av ett område med typ femtio år på nacken.

Jag har anledning att återkomma till sådana här frågeställningar mer i framtiden, inte minst vad gäller områdena rättsautomatik och lagstiftningsteknik i en mer formell betydelse. Men imorgon blir det en genomgång över fria rättsinformationskällor på nätet — missa inte!

Lagstiftaren borde lära sig av webben

There are no reasons at all in theory for people to change URIs (or stop maintaining documents), but millions of reasons in practice

2003 ändrade riksdagen en av de mest centrala lagar vi har, riksdagsordningen (RO). RO är ett mellanting mellan grundlag och vanlig lag, och ändras inte utan vidare. När det gäller en sådan lag tycker man att man borde gå försiktigt fram när man ändrar den, inte minst vad det gäller kapitel- och paragrafnumreringen.

Jag menar, det finns sjukt mycket material som refererar till RO. Om någon skriver ”Enligt RO 3:18 så gäller […]” så vill man gärna att den referensen ska gälla i överskådlig tid.

På både http://blog.tomtebo.org/ och http://lagen.nu/ har jag gjort mitt bästa för att länkar ska funka över tid; om någon är snäll nog att länka till någon av mina blogpostningar eller någon av lagarna på lagen.nu, så vill jag att den länken ska funka, åtminstone så länge domänerna blog.tomtebo.org och lagen.nu är under min kontroll.

Riksdagen har RO under sin kontroll. Trots det valde man i 2003, iom SFS 2003:180 att numrera om stora delar av RO. Det var en del i arbetet att modernisera språket i RO, vilket i sig är en god tanke. I programmeringsvärlden kallar vi sådant ”refactoring”, när syftet är ”changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure”. Det betraktas i allmänhet som en God Sak.

Problemet är att moderniseringen av RO även ändrade det yttre beteendet (”external behaviour”). All gammal juridisk text (ffa doktrin och rättsfall) är plötsligt inte att lita på. Om man läser ”Enligt RO 3:18 så gäller […]” så måste man veta om texten skrevs före eller efter den 1:a juli 2003, eftersom det påverkar innehållet i texten.

Har du någonsin fått felmeddelandet ”The requested URL /[...] was not found on this server.”? Det beror på att någon glömt att URL:er1 aldrig skall ändras. Det är egentligen aldrig OK att lämna felkod 404 för en URL som en gång har fungerat (jag har brutit mot denna regel fler gång än jag kan räkna, men jag har lärt mig av mina misstag). Det enda som är acceptabelt är 301 (Moved permanently) eller 410 (Gone) (eller möjligtvis 307 (Temporary Redirect) i vissa fall). Det är sånt som gör att webben funkar dåligt.

När lagstiftaren numrerar om lagar funkar juridiken dåligt. Det gör att massor av läroböcker, artiklar, rättsfall och andra rättskällor plötsligt har felaktiga referenser. Det här problemet finns på många andra ställen än RO, jag tar bara upp just det här exemplet eftersom jag läser statsrätt just nu och RO är en rätt viktig lag.

Vad som är intressant är att webben bara funnits i tio år. Tim Berners-Lee och andra arkitekter bakom webben förstod det här problemet från dag ett. Juridik har funnits i flera tusen år och har fortfarande inte förstått problemet.

På måndag går jag tillbaka till det rena tekniksnacket och orerar över MacOS X hantering av Unicode i filsystemet. Användbar pythonkod utlovas!

1: …eller URI:er. Skillnaden mellan URL:er och URI:er är intressant för en mycket mycket liten del av mänskligheter. Nån annan dag ska jag ranta om de som använder det ena uttrycket när de menar det andra, och vice versa.

Dålig lagstiftningsteknik

Jag läser C1’an nu, och detaljgranskar därför LAS. Det visar sig att om man är anställd innan den 1:a januari 1997 så gäller helt andra regler för uppsägningstid (de som anges i § 11) än annars (se punkt 2 under övergångsbestämmelserna till SFS 1996:1424) .

Enligt de gamla reglerna styrs ens uppsägningstid av ålder, enligt de nya är det anställningstid som gäller. Det är en rätt fundamental skillnad, och enda sättet att få reda på det är att kolla i slutet av lagen där övergångsbestämmelserna står. Dessutom säger övergångsbestämmelserna inte hur de gamla reglerna löd; det enda sättet är att hitta prop. 1996/97:16 och leta upp förslaget till lagändring (s. 9), ur vilket man kan läsa ut den gamla lydelsen .

Hade det varit så förtvivlat omöjligt att i § 11 inkludera nånting i stil med ”För anställningsavtal ingångna innan 1:a januari 1997 gäller följande…” och sen resten av reglerna i gamla § 11? Om en vanlig oförstörd människa, som inte fått en tvåpoängsutbildning i hur man hittar i SUB, blir uppsagd, och vill leta lite i lagen om vad som gäller, hur ska han rimligtvis kunna veta att det är jätteviktigt att veta huruvida anställningen inleddes innan eller efter 1997-01-01?