Kuro5hin.org: technology and culture, from the trenches
create account | help/FAQ | contact | links | search | IRC | site news
[ Everything | Diaries | Technology | Science | Culture | Politics | Media | News | Internet | Op-Ed | Fiction | Meta | MLP ]
We need your support: buy an ad | premium membership

[P]
Programming Languages Are Human Computer Interfaces

By Scrymarch in Technology
Fri May 04, 2001 at 02:00:31 AM EST
Tags: Software (all tags)
Software

That programming languages interface to a computer should be self-evident. They are, perhaps, the ultimate expert interface. This generates an extreme form of interface loyalty, fanning endless flamewars and internecine feuds that obscure the use of programming languages as tools.


Recall the frustration you feel as a user when a familiar interface has been rearranged badly, or even at all. It's like having the keys on your keyboard rearranged or the nerve for your big toe controlling your index finger. Interface rage is fairly well documented (I think Norman talks about it in Design of Everyday Things ) and established interfaces have a lot of inertia. Conventional interfaces are often kept over more usable, new, interfaces for this reason - the new interfaces have to demonstrate radical improvements for people to change.

When programmers, the most expert users, are confronted with a new expert interface, you get interface rage to the power of ten. Let me illustrate with some examples, helpfully provided by those that initially rejected this article :)

Java

Java is an interesting piece of design for programmer usability. The designers wanted to write a very modern, Smalltalkish (simple) language with a cleaned up C++ object model. Smalltalk itself breaks enough imperative language conventions it never took off as a mainstream application language. (I know! It has a strong and loyal community that have used it for everything from building nanotech assemblers to piloting the space shuttle, and it can be learnt by even the most mentally retarded koala. The last thing I want to do in this article is start a language flamewar.)

The creators of Java desperately wanted it to become a mainstream programming language. So they took many existing conventions for writing individual statements, while leaving the object model intact. They were so worried about legacy programmers they even broke Java's naming convention to help them. For instance, Pascal's println() was used instead of printLine(). The creators worried even more about C, where everyday operators and conventions were swallowed whole.

This superficial familiarity delayed the first flush of C programmer rage until they actually tried to used the language, rather than causing hatred upon sight. Given Java without method implementations is basically an OO focused less-baroque Ada95, this was a valuable hurdle to leap.

Whitespace supremacy

Python is a widely used scripting and teaching language with a clean and simple style. Wherever it is mentioned someone must also curse a critical language element - whitespace as a block delimiter. This concept causes disorientation amongst established programmers.

After all, indentation itself has been the cause for many flamewars and has a clear effect on the texture of code. To a veteran of such wars, the Python interpreter is an unexpected tyrant, and more effort is required to evaluate it as a tool. Interestingly, the ++ operator was added to a recent release of Python to increase it's utility and usability.

Perl killed my brother and ran off with my wife

Despite my best intentions, I am a language bigot, and Perl code sends involuntary shivers down my spine. The clever one line hacks the Perl community loves give me the screaming heeby-jeebies.

This is a shame. Perl has a massive library of developed code, and good tutorials and references. It appears to be an excellent tool for writing quick scripts, as well as determining the semantics of transmission line noise.

Experts invest a lot of time in learning expert interfaces, much of it at a level below conscious thought. As such immediate distaste is a reasonable first response to radical interface changes, such as when changing programming languages. Exposure to many programming languages and paradigms early in a programmer's career, such as at university, may combat this. An awareness of the instinct would also be useful. Ultimately, computing is about solving resource optimisation problems in time and space, with one of the resources being programmer time. If a better tool exists to solve a problem, it should be used. Evaluating a programming language fairly as a tool requires an internal psychological battle between enforced scientific rigour and sub/unconscious screaming out that your technological prosthesis doesn't work properly anymore. Rigour should win.

Sponsors

Voxel dot net
o Managed Hosting
o VoxCAST Content Delivery
o Raw Infrastructure

Login

Poll
Programming languages have the usability of a
o Toaster 4%
o Power point 6%
o Model T Ford 8%
o Boeing 767 32%
o Spoon 24%
o Catapult 11%
o Automatic hand dryer 4%
o Web page 8%

Votes: 62
Results | Other Polls

Related Links
o Design of Everyday Things
o Java
o Python
o Perl
o massive library
o Also by Scrymarch


Display: Sort:
Programming Languages Are Human Computer Interfaces | 53 comments (25 topical, 28 editorial, 0 hidden)
More on Interfaces (3.83 / 6) (#3)
by Devil Ducky on Wed May 02, 2001 at 11:03:17 AM EST

Often times in the consumer software market the viability of your software is decided by the ease of the UI. But if there is a pre-existing product in that niche, your software will not sell unless the UI is similar to the other program or very far ahead of it.

Microsoft bashing aside, this is one of the areas where MS excells. Windows 95, one of the most revolutionary programs ever, sold only because of it's ease of use; but to those experienced with older versions of Windows it was also reverse-compatible. MS-Word burst on to the market fighting tooth and nail with WordPerfect who had the lion share of support and sales. Anyone here used to use WordPerfect? notice how almost all of the key commands are still available in Word.

On the flipside, both GNOME and KDE come with the default settings to look much like the infamous Windows 9X screen; "Start" - bottom left, "Quick Launch" buttons - next to that, "Taskbar" - Next for rest of screen, icons on the desktop, even the colors are similar.

Do you think that it's a coincidence that new version of Windows, GNOME, and KDE all look almost the same as Windows 95? They are all very configurable, my GNOME desktop doesn't look anything like the default, but how many people change them?

Devil Ducky

Immune to the Forces of Duct Tape
Day trading at it's Funnest
Perl and the heebie-jeebies (3.75 / 4) (#4)
by greyrat on Wed May 02, 2001 at 11:17:52 AM EST

Perl code sends involuntary shivers down my spine. The clever one line hacks the Perl community loves give me the screaming heeby-jeebies.
Then use the more formal syntax. I know that when I need a perl quickie, it's going to be as down and dirty as I want. But when I'm writing for the ages or for other people to maintain, I go with full syntax.
~ ~ ~
Did I actually read the article? No. No I didn't.
"Watch out for me nobbystyles, Gromit!"

right on (2.50 / 2) (#11)
by Justinfinity on Wed May 02, 2001 at 01:20:20 PM EST

Read the Camel book, or even just the Llama book, from ORA. Listen to what Larry Wall and other core perl developers have to say. Perl is the swiss army knife of languages. No other language lets so many people do so many things in so many ways.

Yes, you can write messy, ugly code in Perl very easily. I can do the same in C fairly easily. Yet someone who knows Perl can also look at that seemingly ugly code that was used to prototype something and expand and extend it out into a thing of beauty. Obfuscating C does take more work, but, that's part of Perl's uniqueness. It allows programmers to be lazy when they need to. It makes the easy stuff easier, the hard stuff easy, and the really hard stuff possible.

Also, it seems that the biggest argument against Perl is the way it looks to people who don't know it. No one ever mentions it's slowness, or lack of certain features (ok, there is no equivalent to C's switch() besides if/elsif/else), lack of a debugger, or anything else. That's because they don't exist! Perl is compiled im memory at runtime, so execution speed after the initial interpretation is comparable to C. Starting with Perl5, you can compile perl directly to binary with perlcc to even get rid of that initial compile time. It has a debugger written in Perl itself. CPAN has arguably the hugest base of reusable code anywhere. I haven't gotten much into it's object-oriented aspects, but people seem to like it.

I guess I would just like to say stop putting down perl simply on the fact that people who know the language like to have a little fun. Heck, I was writing crazy one-line "Hello world!" things two days after I got the Llama book.

And remember, TMTOWTDI!

-justin
[ Parent ]
note: (none / 0) (#13)
by Justinfinity on Wed May 02, 2001 at 01:36:19 PM EST

the previous comment is directed at the story author and other people who dislike perl purely based on the fact that it looks funny. obviously not at greyrat, who apparently likes perl :-)

-justin
[ Parent ]
No offence taken! (3.00 / 1) (#34)
by greyrat on Thu May 03, 2001 at 10:38:41 AM EST

BTW, I don't 'like' perl any more than I like a Castell-Faber No. 2 pencil...or C. There's just tools! #;^)
~ ~ ~
Did I actually read the article? No. No I didn't.
"Watch out for me nobbystyles, Gromit!"

[ Parent ]
re: No offence taken: Amen!!! (none / 0) (#49)
by tang on Sat May 05, 2001 at 11:53:35 PM EST

Amen to that! I FREAKING HATE CASTELL-FABER NO2. PENCILS!!! I wish we could get rid of them all! Its good to know someone else has this same hatred of the cursed C.F. No2 Pencil.
Thank you.
-t

[ Parent ]
Another off-topic article (2.25 / 4) (#7)
by darthaya on Wed May 02, 2001 at 11:38:54 AM EST

The topic says "Programming Languages Are Human Computer Interfaces", and I was expecting for some insight discussion/comment on How programming languages are human computer interface, and what we can take advantage from this concept, and so on.

But again, this turns out to be a BIG dissappointment of some random mumble jumble under a spectacular topic. This, should have gone into a Diary entry.

-1 from me.

"What's the Diary?" (5.00 / 1) (#27)
by static on Wed May 02, 2001 at 08:37:30 PM EST

We don't all write diaries on K5. We don't all read the diaries, either.

It looks like we need an article reminding a few people that not everyone who frequents K5 actually frequents all of K5.

Wade.

P.S. Your comment should also have been Editorial.

[ Parent ]

Exposure to Languages (2.50 / 2) (#14)
by eann on Wed May 02, 2001 at 01:42:26 PM EST

Dunno if this is an ACM or CSAB rule, but my undergrad CS program's requirements nearly 10 years ago included coursework in at least two languages vastly different from C (the primary language for coursework).


Our scientific power has outrun our spiritual power. We have guided missiles and misguided men. —MLK

$email =~ s/0/o/; # The K5 cabal is out to get you.


Duh...programmers are *not* the experts (2.25 / 4) (#19)
by DranoK on Wed May 02, 2001 at 04:11:52 PM EST

on human-computer interaction. In fact, most programmers I know can't use a shell or even a GUI without someone standing over their shoulder holding their hand. Of course, kernel hackers are a different breed, but for the most part (IMO) programmers are definately NOT the ultimate in human-computer interaction.

DranoK


Poetry is simply a convenient excuse for incoherence
--DranoK



Experts on What? (none / 0) (#31)
by moshez on Thu May 03, 2001 at 04:56:09 AM EST

I don't understand what you're saying. Are you saying that programmers cannot design good user interfaces? That's true and not true -- non-user-interface-designers can't, and most programmers aren't. That programmers are not very sophisticated computer users? False in general. That programmers sometimes the need of a helpdesk? That's pretty obvious.

[T]he k5 troll HOWTO has been updated ... This update is dedicated to moshez, and other bitter anti-trolls.
[ Parent ]
I mean (none / 0) (#36)
by DranoK on Thu May 03, 2001 at 01:16:42 PM EST

programmers can't interact with existing user interfaces. *sigh* Just once I want to NOT get the following call: "How do I shut down my linux box?"

Just once, just once, I want to be able to say, "/sbin/halt" and leave it at that. Usually I have to get off my fat ass and do it for them, or just ssh over there and halt their machine.

Pathetic.

DranoK


Poetry is simply a convenient excuse for incoherence
--DranoK



[ Parent ]
Well, you see... (5.00 / 1) (#38)
by ucblockhead on Thu May 03, 2001 at 05:29:23 PM EST

If someone is smart enough to figure out how to shut down their linux box, they probably won't be calling you, now will they...

It's called a skewed data set.
-----------------------
This is k5. We're all tools - duxup
[ Parent ]

nah (none / 0) (#37)
by jayfoo2 on Thu May 03, 2001 at 01:57:04 PM EST

<disclaimer> wild ass generalizations follow, I'm sure you can not only program in assembler but also have art on display in the louvre. In addition you are an attractive person, always remember to floss, and will remember to send your mother a card for mother's day. </disclaimer>

Programmers are very good a programmer-to-computer interfances. In other words programmers tend to create interfaces that work exceptionally well when a programmer (or another *fu possessing creature) is at the keyboard. As evidence I present regular expressions, and the Unix command line.

This of course has nothing to do with programmers being programmers. Math teachers are usually good at developing a math-teacher-to-computer interface. Disc jockeys are good a DJ-to-computer-interfaces. My clients tend to develop idiot-to-computer-interfaces.

Very few people are good at developing X-to-computer interfaces for people who are not themselves (who they are not?).


[ Parent ]
Python? (3.75 / 4) (#29)
by moshez on Thu May 03, 2001 at 04:50:04 AM EST

Python is a widely used scripting and teaching language with a clean and simple style. Wherever it is mentioned someone must also curse a critical language element - whitespace as a block delimiter. This concept causes disorientation amongst established programmers. After all, indentation itself has been the cause for many flamewars and has a clear effect on the texture of code. To a veteran of such wars, the Python interpreter is an unexpected tyrant, and more effort is required to evaluate it as a tool. Interestingly, the ++ operator was added to a recent release of Python to increase it's utility and usability.
OK, this has no many errors and half-truths in it, it isn't even funny. First of all, Python was of course based on user-interface studies -- Guido van Rossum was one of the designers and implementers of ABC, a language for which extensive user-testing was done. Many conventions, like using indentation to signify blocks (using the tool programmers use anyway) and using the colon to signify where blocks start, are based on what constructs are easy to use.

Python does not dictate indentation: any indentation level can be mixed out of tabs and spaces (tabs are of course aligned on 8-column boundaries) and there are indentation flamewars just like everywhere else. Naturally, there are no flamewars over where to place the block delimiters, because Python in a "tyranical" move, doesn't have them.

Python did not add the "++" operator, and it is unlikely that it will ever have one -- the semantics of such an operator are not completely clear. Python did add the "+=" and friends operators, after many debates. It is generally taken to be something that aids readability rather then hinders it.

[T]he k5 troll HOWTO has been updated ... This update is dedicated to moshez, and other bitter anti-trolls.

Does _not_ dictate indentation? (none / 0) (#43)
by linus nielsen on Fri May 04, 2001 at 10:50:51 AM EST

"Python does not dictate indentation: any indentation level can be mixed out of tabs and spaces"

Well, if Python does not dictate indentation, then I don't know what "dictate indentation" means. Since Python uses the indentation to group statements, you can't indent your code arbitrarily. Period.

That doesn't necessarily mean that I think Python's way of grouping statements is bad (although I do).

And BTW, from the Python online reference:

Cross-platform compatibility note: because of the nature of text editors on non-UNIX platforms, it is unwise to use a mixture of spaces and tabs for the indentation in a single source file.

[ Parent ]

Try it first (none / 0) (#45)
by costas on Fri May 04, 2001 at 01:09:45 PM EST

Python's whitespace tyranny is exaggerated. I will repeat (yet again) a true anecdote. When I first heard of Python (on /.) and its whitespace rules, I laughed. I thought it was a joke; I found it so funny in fact that I made the language the butt of many an in-house joke in my company ("if you don't fix this, I will embed Python in the server").

Then, out of pure curiosity I read more on the language. And then some more. My interest was picqued. I downloaded the language and started playing; and I was hoooked: in 3 days (that's about 20-25 hours of coding, most of which was reading the excellent Python manual) I went from a python newbie to piping serialized python objects over http (no, the std library didnot do this) and introspecting dynamically. In about 3 weeks, I knew most of the std library, including some obscure nooks and crannies.

Yes, granted, I know about 10-15 other languages, most of which are forgotten by now, but that's my point: never, not once, was the whitespace thing a problem. I just started editting a .py file on vim, with my preferred settings (4 spaces for tabs, expand tabs on) and I never saw an interpreter error about whitespace. Now, after thousands of lines of python code, braces and begin/end delimeters look stupid and superfluous, not the Python way.

BTW, the true Python rule on whitespace is that whitespace has to be consistent *within a code block*. E.g.:

for i in x:
if i > 5:
print "world"
print "hello"

is perfectly legal; this is way more forgiving than the article would have you believe.

Oh, and I am embedding Python on that server after all...


memigo is a news weblog run by a robot. It ranks and recommends stories.
[ Parent ]
Freak (none / 0) (#46)
by costas on Fri May 04, 2001 at 01:15:20 PM EST

... forgot the plain text mode; no, that fragment above is not valid python... let me try again:

for i in x:
   if i > 5:
           print "world"
   print "hello"


memigo is a news weblog run by a robot. It ranks and recommends stories.
[ Parent ]
Argh (none / 0) (#47)
by costas on Fri May 04, 2001 at 01:17:47 PM EST

I give up. The CODE tag shouldn't mess with whitespace. I swear this is Scoop sabotaging Python examples in the forums :-)...

memigo is a news weblog run by a robot. It ranks and recommends stories.
[ Parent ]
Errors, notes (none / 0) (#51)
by Scrymarch on Sun May 06, 2001 at 10:04:49 PM EST

OK, this has no many errors and half-truths in it, it isn't even funny.

It has one bad error and a few controversial statements, I'll expound below.

First of all, Python was of course based on user-interface studies -- Guido van Rossum was one of the designers and implementers of ABC, a language for which extensive user-testing was done. Many conventions, like using indentation to signify blocks (using the tool programmers use anyway) and using the colon to signify where blocks start, are based on what constructs are easy to use.

Well, I didn't know that, but it doesn't surprise me. I didn't intend to imply it either - Guido simply decided the usability benefit of breaking convention was worth it - and I'd have to agree.

Python does not dictate indentation: any indentation level can be mixed out of tabs and spaces (tabs are of course aligned on 8-column boundaries) and there are indentation flamewars just like everywhere else. Naturally, there are no flamewars over where to place the block delimiters, because Python in a "tyranical" move, doesn't have them.

Well, with the other repliers I disagree about Python not dictating indentation. Do you guys really have flamewars over whether to use 4 or 6 spaces? That reaffirms my faith in human nature :)

The Python interpreter is a tyrant just like all compilers and interpreters are tyrants. Python is simply an unexpected tyrant when it comes to whitespace. Basically I was trying to remember my first instinctive rejection of this quirk. I quite like it now - in fact, I hope it becomes a common feature in future languages.

Python did not add the "++" operator, and it is unlikely that it will ever have one -- the semantics of such an operator are not completely clear. Python did add the "+=" and friends operators, after many debates. It is generally taken to be something that aids readability rather then hinders it.

Yes, ++ was a mistake on my part, and a nasty, glaring one too. But the point holds for +=.

[ Parent ]

Indentation Flamewars (none / 0) (#53)
by moshez on Wed May 09, 2001 at 08:43:59 AM EST

Well, I haven't yet seen a flamewar per-se...But certainly, different Python programmers have different preferences. I have this rule where I always comply with a local project's style, so when I work on (for example) the Python core, where the rule is 4-space indentation, I follow it. But in my own projects (so far only one larger then single-file things) I use 1-tab indentation.

[T]he k5 troll HOWTO has been updated ... This update is dedicated to moshez, and other bitter anti-trolls.
[ Parent ]
programming languages as HCI (none / 0) (#42)
by treefrog on Fri May 04, 2001 at 08:20:38 AM EST

An interesting and insightful idea leading to ... well nothing really.

There is certainly a nugget of truth here. Good user interfaces make it possible for the user to achieve their goals in a quick and easy manner without getting stressed. A good programming language should do the same.

Now obviously, programming languages have different goals, so there is no "one true way" and "one true language". But it is certainly interesting to note that consistancy of approach is a great help.

Take for example a couple of good examples, and a couple of bad examples. The good examples are c and ruby. In c, all data is just raw memory; the built in types (int,float,double,char) serve to hint to the compiler how to most efficiently perform certain types of operation (e.g. arithmatic) - there is no reason why floats should not be added using integer registers rather than an FPU - it is just more efficient to do so. c uses function calls to perform all processing and data manipulation.

A second good example is ruby. Everything in ruby is an object. Everything. The object oriented approach permeates the language from end to end. Data, function calls or method invocations, etc etc. This uniformity of approach is one of the strengths of ruby (and a number of other languages such as Smalltalk and Python, I believe, although I can't speak with any authority on these subjects).

Moving on to a couple of bad examples; c++ and Java. Both languages share a certain messiness in dealing with data - some data is objects, some is not (e.g. ints, doubles etc). Similarly c++ offers a choice of functions (a la c) or functors.

C++ has a valid excuse - it was deliberately designed as a bolt on extension to c, and that was certainly a worthy design decison, although it doesn't help the usability of c++. Java probebly had a lot less excuse (I know java has many strong points - this is not one of them). It certainly does not help the comprehension of java code.

Uniformity of approach is just one example of a principle from HCI (on which I am NOT an expert) that could and should be applied to language design. I am sure there are many others that should also be applied.

Maybe part of the point is to evaluate the languages that are available today as choices for a particular problem. But when we are designing languages to solve tomorrows problems, the design choices we make should be tempered by the fact that we are designing a human computer interface, and should take on board the corpus of knowledge in this discipline.

If we cared to stand on the shoulders of giants, we could see much further.

regards,

treefrog
Twin fin swallowtail fish. You don't see many of those these days - rare as gold dust Customs officer to Treefrog
One correction and a "beg to differ" (none / 0) (#50)
by Macrobat on Sun May 06, 2001 at 01:09:33 PM EST

All data in c++ are objects. C++ treats its built-in data types as objects, but (someone correct me if I'm wrong) their methods are all non-virtual. That is, you can't inherit from them.

On a philosophical level, just because OO (or anything else) is a good tool, doesn't mean that, therefore, the entire language/interface must be designed around it. Bjarne Stroustrup has stated several times that c++ is a multiparadigm language, one that allows, but does not require, object orientation. That freedom, that choice of tools, has at least as strong an argument going for it as does the "consistency" of straitjacketing programmers into OO.

"Hardly used" will not fetch a better price for your brain.
[ Parent ]

Correction? (none / 0) (#52)
by treefrog on Tue May 08, 2001 at 05:39:17 AM EST

I don't really want to flame c++ - I use it all the time and I think it is a fine systems programming language. My point was really that from an HCI point of view c++ has inconsistancies.

With regards to your correction, I think there is a difference between the internal treatment of built in data types by a c++ compiler, and their external properties as visible to an observer (in this case a programmer). In the former case, yes, an int may be an object. In the latter case, then an int lacks the necessary attributes of an object.

I do agree that the design of c++, as stated by Stroustrop, was to add on the potential to use OO on top of an existing language (C, in this case). However, my original point was that from an HCI point of view, uniformity of approach is an important consideration. In this way c++ does suffer. I still maintain that this is not nearly as bad as in Java: int (c++) I can understand, but int and Integer (Java) does seem rather strange.

More generally, I agree that languages should not be designed to force users into a straight-jacket. There is (and should be) more than one way to do it. But the goal of a language must surely be to promote and the clean and elegant expression of an algorithm, and its efficient implementation into the architecture (usually a Von Neumann Architecture at present). Witness the discussion on rethinking programming languages and this post on the time complexity of functional programming approaches.

If we improve the quality of the way that we, as programmers, interact with our code, then we will spend more time writing (hopefully) good code, and less time fighting to express ourselves.

regards, treefrog
Twin fin swallowtail fish. You don't see many of those these days - rare as gold dust Customs officer to Treefrog
[ Parent ]

Python and whitespace (none / 0) (#48)
by Requiem on Sat May 05, 2001 at 07:09:23 PM EST

Python is a widely used scripting and teaching language with a clean and simple style. Wherever it is mentioned someone must also curse a critical language element - whitespace as a block delimiter. This concept causes disorientation amongst established programmers.

Almost anything will cause disorientation amongst established programmers. Once you use your language of choice for a while - be it C, Perl, whatever - you're going to have a hard time adapting to new things. I found that the leap to OO after learning BASIC, Pascal, and some C was a little tricky - I'd been doing procedural programming for a while, so thinking in objects took a little bit. Now, of course, I'm in love with OO, but there we go.

When I first heard about Python's whitespace blocks, I did what everyone else did: think "Phht, Python sucks." and leave it at that. Once I actually tried Python, and got my hands dirty with it a little, I found that I loved the whitespacing. It's intuitive. Use a colon, and tab in your code. I find that far more readable than C and its derivatives, which I also find to be quite readable.

When writing in C, C++, Java, etc., the vast majority of people I've seen will indent their code past the braces. I don't see, then, why eliminating the braces is such a sin.

Interestingly, the ++ operator was added to a recent release of Python to increase it's utility and usability.

Good. This is one of the C-isms that I actually enjoy and use regularly. Sure, it's shorthand, but I find myself incrementing variables by one so often that not having it bugs me a little.

Anyhow. Python's a great language. If you haven't had any experience with it, I'd recommend giving it a try.

Programming Languages Are Human Computer Interfaces | 53 comments (25 topical, 28 editorial, 0 hidden)
Display: Sort:

kuro5hin.org

[XML]
All trademarks and copyrights on this page are owned by their respective companies. The Rest 2000 - Present Kuro5hin.org Inc.
See our legalese page for copyright policies. Please also read our Privacy Policy.
Kuro5hin.org is powered by Free Software, including Apache, Perl, and Linux, The Scoop Engine that runs this site is freely available, under the terms of the GPL.
Need some help? Email help@kuro5hin.org.
My heart's the long stairs.

Powered by Scoop create account | help/FAQ | mission | links | search | IRC | YOU choose the stories!