[mmox] Permissions

Gareth Nelson <gareth@litesim.com> Mon, 23 February 2009 08:59 UTC

Return-Path: <gareth@litesim.com>
X-Original-To: mmox@core3.amsl.com
Delivered-To: mmox@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 957FB3A69DA for <mmox@core3.amsl.com>; Mon, 23 Feb 2009 00:59:34 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.077
X-Spam-Level:
X-Spam-Status: No, score=-1.077 tagged_above=-999 required=5 tests=[AWL=-0.900, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, J_CHICKENPOX_42=0.6, J_CHICKENPOX_46=0.6, J_CHICKENPOX_66=0.6]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fuVWw-RdJtW8 for <mmox@core3.amsl.com>; Mon, 23 Feb 2009 00:59:33 -0800 (PST)
Received: from po-out-1718.google.com (po-out-1718.google.com [72.14.252.152]) by core3.amsl.com (Postfix) with ESMTP id B252D3A6998 for <mmox@ietf.org>; Mon, 23 Feb 2009 00:59:33 -0800 (PST)
Received: by po-out-1718.google.com with SMTP id b23so6403243poe.4 for <mmox@ietf.org>; Mon, 23 Feb 2009 00:59:51 -0800 (PST)
MIME-Version: 1.0
Received: by 10.141.97.5 with SMTP id z5mr1931612rvl.212.1235379590314; Mon, 23 Feb 2009 00:59:50 -0800 (PST)
Date: Mon, 23 Feb 2009 08:59:50 +0000
Message-ID: <61dbdd7d0902230059u69e87ed3n3a85b905593c11@mail.gmail.com>
From: Gareth Nelson <gareth@litesim.com>
To: "mmox@ietf.org" <mmox@ietf.org>
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 7bit
Subject: [mmox] Permissions
X-BeenThere: mmox@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Massively Multi-participant Online Games and Applications <mmox.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/mmox>, <mailto:mmox-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/mmox>
List-Post: <mailto:mmox@ietf.org>
List-Help: <mailto:mmox-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/mmox>, <mailto:mmox-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 23 Feb 2009 08:59:34 -0000

Just been talking to Adam about this and knocked out a very very rough
spec. It may be early in the game to discuss this issue, but it's one
that drives a lot of emotion in people on all sides of the debate.

So, without further a-do, here's a rough spec for a DSL (Domain
Specific Language) for permissions to discuss (copied and pasted from
my vim session, excuse any formatting weirdness):
Original concept courtesy of Adam Frisby, see
http://www.adamfrisby.com/blog/2008/08/hypothetical-permissions/

Very very rough thinking out loud

Each asset has a set of metadata fields:
	Author
	Creation timestamp
	Last modified timestamp
	Logs of modifications? (TBD)

Possible actions:
	Copy
	Modify
	Transfer
	Transfer for cash

Each action attached to a simple function that returns a boolean value
if action is allowed.
Data types:
	Entity
		Describes a user, organisation, system or network
	Asset
		Describes an asset ;)
	Location
		Describes a virtual location, rather than a physical system
	Time
		Date and time :)

Entity has these fields:
	Name
	UUID
	Class (person, organisation, system, network)
Optional fields for person entities:
	Agent domain? (TBD)
	System (what system is the user connecting from - may be withheld for
privacy reasons)
	Location (where in the metaverse are they?)
Optional fields for organisation entities:
	Organisation type (nonprofit/commercial/government etc)
	Company type (for corporations: LLC/Ltd/PLC/whatever)
	Address (i.e postal address)
	Technical contact (a person entity!)
Optional fields for system entities:
	Platform
	System hash (hash of various bits of hardware, HD serial and ethernet MAC etc)
	Network
	Current IP address
Optional fields for network entity
	Technical contact (heh, redundant)
	CIDR prefix

Asset
	Name
	MIME type
	UUID
	Creator
	Creation time
	Last modified time
	Last modified by

Location
	TBD (Obviously not the SL style Region/x/y/z)

Time
	You need to ask? ok,
	Day
	Week
	Month
	Year
	Hour
	Minute
	Second
	All integers

Simple comparision operators to match on what is passed to the functions
!=, ==, >, <, >=, <=, a few simple string functions, the usual suspects

function prototypes:
copy(Entity src, Location location, Time time, Asset ass)
	src      == the user currently holding the asset who wishes to copy it
	location == the location the requesting user is inhabiting at present
	time     == the time the request was made at (just in case there's
batch processing or serious latency)
	ass      == the asset being copied
modify(Entity modifier, Asset ass, Time time, Location loc)
	modifier == the entity trying to modify
	ass      == the entity they're trying to modify
	time     == the current time
	loc      == where is our modifier while they're trying to modify?
transfer(Entity src, Entity dst, Location loc, Time time, Asset ass)
	Same as copy essentially
sell() is just transfer, but invoked for transfers in exchange for compensation

The modify() function could probably do with a description (if
possible) of the modification being requested, for example in my own
work i'd want to prohibit modifications to the permissions in order to
enforce the GPL, others may have different requirements.


DANGER! DANGER! READ:
	Any system that can be proposed here can only be used to express
intent, it can express that intent very clearly using a DSL as i've
roughly
        spec'ed out above, but it will never be possible to actually
enforce it on systems that do not want to enforce it. I'll note that
personally I
	absolutely hate DRM for the most part, but if it's going to be a
reality it should be done right, and should allow any type of license
to be roughly
	expressed in a way that can be handled by automated systems. If for
no other reason than mere practicality, a decent DSL for specifying
what
	permissions an author of a copyrighted work has granted under
existing copyright law can be useful and saves having to pester the
author.