Thursday, December 15, 2005

Useful Abstractions

Michael paraphrases Doc

The URL = an abstraction of...
The IP address = an abstraction of...
The MAC address.
The purpose of abstraction is to move dependencies. This allows specialization, which then allows economies of scale to do their work. When we use an abstraction, we're ceding some control, in order to simplify our lives.

It is important to keep in mind that the dependencies still exist, and need to be managed. We, the technicians and engineers of the world do just that, which is why we get paid the big bucks, right? We're part of the cost of abstraction, which everyone accepts as part of the bargain.

Now, in turn for paying the costs, lets look at the nature and benefits of the abstractions, in reverse order.

The MAC address
The MAC address of network adapters is a useful abstraction of a complete computer or hardware device, because things get moved or upgraded. Imagine if you had to have a wiring diagram for every single pin of every wire in your company in order to do anything. You'd always be using some form of wire tracer to track down problems. MAC addresses free us from the constraints of having to map and manage every physical connection.

The IP address is a useful abstraction of the MAC address, because connections shouldn't require a specific route or knowledge of the network.

You (or your computer) shouldn't need to know the exact circuit path necessary to get data to another computer. Just as a mail address allows anyone to send mail to any address in the world, an IP address serves as a unique identifier to allow a message to find its destination anywhere in the world.

Note: One thing people forget about mail is that there is no security when it comes to the source address of mail. (AKA the Return Address) This tradeoff has been accepted since the inception of public mail services, and is one of the driving forces behind mail fraud laws, etc. This fact is also true about IP packets, and I suspect it will always be true for any store and forward system for sending data.

The URL is useful an abstraction of The IP address, because content shouldn't be tied to a specific server or service.

Now this does skip a layer or two, but is very useful as well. The nature of the URL allows specification of a protocol, server and filespec by name. A uniform set of parameters allows one to access a document via across 3 namespaces in one fell swoop. It doesn't matter if its Gopher, FTP, WWW, RSS, or something completely new, it still can be used as the protocol. It doesn't matter where the server is, the server name leads the way. It can be buried 3 folders down, or can be part of a RESTful address, it doesn't matter... All of this glorious complexity can get put into one URL, and let the tech's worry about the rest.

This brings us to the focus of this posting, what's the next useful abstraction. How does the world work, or better yet, how do we want the world to work?

Here are a few themes and suggestions that come to mind:

Usernames are how computers abstract us, because computers shouldn't be tied to specific people or companies.


Think about it... if everyone had their own PC, and could never share them, there wouldn't be a need to have passwords. As computers moved out of the labs, and became multi-user, it was necessary to find was to abstract people so that the computer didn't have to track each capability for each and every possible person. It's the need to decide what capabilities are given to which people that resulted in the creation of usernames, passwords, and that whole level of abstraction.

When a person has only a handful of accounts, it is reasonable to assume they can manage them. With the growth of services on the internet, it's possible that users might need to have rights assigned to them on computers they don't even know about. It's time for another level of abstraction, which is what the identity folks are all talking about.

Indentity is how we want to abstract our relationships, because we shouldn't be tired to direct personal relationships with each and every server or service on the internet.
Anyone with a resource made available to the internet immediately hits the brick wall first encountered when computers made it out of the lab, the need for relationships. To limit use of the resource, a relationship is imposed, often carrying with it an assymentrical relationship of power, and frequent possibilities for abuse. The only identity we currently have on the internet is the one that we manage to assert through the filter all the imposed relationships.

When someone runs a service, such as a site that allows comments, spam rapidly rears its ugly head. To limit the spam, the usernames and registration get forced on users. Often the signup requires us to disclose far more than is really necessary, but is a tradeoff most make. All of this, just to really say to the service... yes... this person is real, and not a spammer.

There was a joke RFC in the past few years about adding an "Evil Bit" to packets on the internet. A working relationshop system is part of the way to implementing a "Good Bit" for the internet instead. It's a way of asserting identity, and preventing spam. Repudiation, reputation, and all sorts of other terms float into the discussion, but it's really all about trust. Trust that is, and always will, be destroyed by those who game any system.

Usernames worked for a while, but with throw-away email, and other contermeasures, they are rapidly losing their effectiveness. For this reason, the abstraction we'd like to define as "Identity" will happen, and our conversations will hopefully lead developers and the rest of society towards OUR version of this abstraction, and not some corporate DRM 1984 world that might otherwise evolve.

Tags are a general purpose abstraction for categorization, because we're not all reference librarians, and it's good enough.

There are some who have big problems with tags, because they're not specific enough, and they might overlap, and they tend to be a bit messy. What they do for us is allow us to categorize things for the task at hand. On Flickr, they help locate pictures of kittens, elsewhere they help categorize knowledge, websites, RSS feeds, etc. Tags are gritty and human, and just functional enough to get the job done. They serve as useful abstractions of the subject at hand.

Thank you, gentle reader, for your time and attention.

No comments: