I have a problem. I have too many ideas for things that should be
made or fixed to make the world a better place.
Let me explain a
little. I run the Serval Project, making mobile telecommunications
available in many situations where it is not currently possible. In
leading that project I have discovered that there are some serious
problems with WiFi for supporting ad-hoc network that it would be
great to have fixed.
Then I also discovered that it would be really great to make
mobile phones with a built-in Arduino or similar micro-controller and
accessible hardware port so that people can innovate with mobile
hardware just like they do with mobile software. This could be used
to make all sorts of things, from powerful yet cheap environmental
monitoring systems, to supporting long-range mobile mesh networks, to
creating really low-cost medical monitoring devices (for example, a
pulse-oximetry machine is really just four LEDs plus some signal
processing that a phone could easily provide).
This is already too much for me to do right now. But I have other ideas queued up, and that I come up with over time.
For example, since being inspired by Prof. David Powers during my undergraduate
degree, I have been convinced that we need to make laws
machine-readable. This makes a lot of sense, since the whole idea of
legal language is to be clear and precise. In the past legalese was
the best we had to express the logic part of laws, but now we have
computer languages and compilers that are so precise that it is
almost annoying, but more importantly, can help us to visualise and
transform legal logic into other equivalent forms that allows the
intent and effect of the laws to be checked before being proclaimed.
With some careful construction, we could make a LawCompiler 1.0 that
lets us do this kind of thing. Much would be possible with just a
combination of definitions and logic blocks. For example, to work
out if someone could legally work in Australia, we might have a logic
block like:
FUNCTION CanLegallyWorkInAustralia BEGIN
IF
IsAustralianCitizen OR IsNewZealandCitizen OR HoldsValidWorkVisa THEN
RETURN true
ELSE
RETURN false
END IF
END FUNCTION
Then all that needs to be done is to recurse back through the
referenced terms in the logic block and define them also. The ideal
would be that terms are defined as logic blocks themselves, but at
some point there is probably a need to define some in legal terms, so
you simply have a definition, e.g., we might cheat in the above and
define IsNewZealandCitizen like:
DEFINITION IsNewZealandCitizen IN ENGLISH IS
“A
person shall be considered a citizen of New Zealand if they are not a
citizen of Australia, and if they currently hold citizenship in the
nation of New Zealand.”
END DEFINITION
But eventually we could do things like:
IMPORT IsNewZealandCitizen FROM NewZealand.CitizenshipAct.1992;
This would allow a flexible, bottom-up approach to harmonising
laws between jurisdictions where it makes sense (some distinction
between dynamic versus static binding of definitions would be
necessary). For example, states or counties could reference common
dog-ownership regulations, or countries in the European Union could
harmonise laws by referencing definitions created by the EU, and such
harmonisations could be made progressively.
The compilable laws would be no
less readable than ones in legalese by the average person on the street, and would have the
advantage of being subject to precise interpretation, irrespective of
the human languages involved, thus aiding translation and consistency
in jurisdictions where laws have versions in multiple languages. To
aid interpretation, or to help find bugs in laws, such logical
definitions of laws can be transformed, e.g., into a truth table,
that allows for checking that the law does not create any strange
corner cases, which is a very common problem in laws of any
significant complexity. For our legality of working test above, the
truth table would resolve to something like:
CanLegallyWorkInAustralia
|
IsAustralianCitizen
|
IsNewZealandCitizen
|
HoldsValidWorkVisa
|
TRUE
|
TRUE
|
N/A
|
N/A
|
TRUE
|
N/A
|
TRUE
|
N/A
|
TRUE
|
N/A
|
N/A
|
TRUE
|
FALSE
|
FALSE
|
FALSE
|
FALSE
|
By definition each of the lines in the truth table are mutually
exclusive, and so it becomes fairly easy to work out what will happen
in any given situation. Of course for realistic laws, there may be
dozens of input factors, and so the truth-table may grow very large,
but that can always be avoided by creating intermediate definitions
for common cases. This also helps promote the cleaning up of the
logic in laws instead of perpetually tacking bits on the end that
make the entire thing incomprehensible. Income tax laws are a good
example of this. By being able to compare truth-tables before and
after a patch, it becomes possible to know
with complete
certainty, that the patch to the law (or cleanup of the law) has
not changed the meaning of the law in any unexpected way.
Anyway, I digress greatly, but that is perhaps the point. I need
a place to capture all these ideas, so that they can be vetted,
prioritised and actioned, either by myself or someone else.
Similarly, it would be great to capture everyone else's ideas, and
basically assemble a
Universal Bug Tracker For Society (UBT4S).
This
would make it easier for me to sleep at night, knowing that the ideas
are captured. It would also allow me to be much more effective by
being able to more easily focus on exactly one bug at a time, and to
record any progress or thoughts relating to others. But again, I
suspect that the impact will actually be much greater from other
people entering the feature requests and bugs of society that they
think of or notice.
The UBT4S also makes it easy for people who are not plagued by new ideas to join in the
effort, but who want to make a positive impact in the world: They
can simply go to the UBT4S, browse the bugs and feature requests,
maybe vote some up or down, add some notes, or, hopefully, assign one
to themselves and do some work on it.
The underlying philosophy that makes the UBT4S make sense is the
realisation that if you are a social entrepreneur having someone else
cut your lunch by doing something you had planned to gives you a free
lunch in the form of releasing you to pursue other innovations. I'll write a blog post on this competition-is-a-gift aspect of social entrepreneurship soon.
But right now, this is what I am going to do: I am going to register ubt4s.org
and setup a bug tracker there, that will be open to anyone to
register and contribute to. I will pre-load it with some bugs and
feature requests for society that I have in mind (including those
above).
I will also lay out some rules for the UBT4S. These rules will be
subject to the UBT4S itself, and so if you don't like them, then
please submit an issue that describes the problem
and how they
can be improved.
This is a very important point, because I don't want
the UBT4S to be a whinge board about all that is wrong with society.
I also don't want it to be a place where people say that country X
needs party Y in power. The political domain is already quite
saturated, and not a fun place to operate for the most part.
The
UBT4S, on the other hand, is a place where tools and
personal-action is the approach. Think of it as a meta-project
around various various existing and yet-to-exist open-software, open-hardware and life-hacking
projects that has “universal peace and happiness” as its' goal (which I have purposely not defined),
and then identifies tools that can be used to edge closer to that.
I
immediately recognise that this approach has limitations, but then so
does Newtonian Physics, but that doesn't stop us using
non-relativistic rulers to measure how tall our kids are, and nor
should the fact that the UBT4S has natural limitations prevent us
from achieving as much universal peace and happiness as we can using
that tool.
So now I throw the challenge out to you: visit
UBT4S.org, add
bugs, issues and feature requests. Comment on existing issues, and maybe start Wiki pages to begin marshalling resources for them. If you are part of a project that
is providing a solution (or part of a solution) to an issue, then
make a note of that in the tracker. That way people who want to help
in that particular area can find the right projects to join, donate
to or otherwise help.
I look forward to seeing you at the UBT4S.
(Also if anyone has a better idea than using Google Code, I'm all ears. Add it as an issue to the UBT4S, and we can work on fixing it.)