OurNet - Interface to BBS-based groupware platforms
# import modules automatically use OurNet qw/FuzzyIndex BBS BBSApp/; # the rest of code... my $BBS = OurNet::BBS->new(@ARGV); # etc
The OurNet line is currently split into two distinct projects: the BBS and Query suites, represented by the Bundle::ebx and Bundle::Query on CPAN, respectively.
Note that the old OurNet::BBSApp interface is deprecated as of OurNet v1.6. We'll work on a set of equivalent module that could work on the 1.6 series.
Here are a run-down of distributions offered by these two bundles:
In OurNet::BBS distribution:
BBS RmpO Component Object Model for BBS systems
In OurNet::BBSApp::Sync distribution:
Sync RmpO Sync between BBS article groups
In OurNet::BBSAgent distribution:
BBSAgent RmpO Scriptable telnet-based virtual users
In OurNet::FuzzyIndex distribution:
FuzzyIndex RmcO Inverted index for double-byte charsets ChatBot RmpO Context-free interactive Q&A engine
In OurNet::Query distribution:
Query RmpO Perform scriptable queries via LWP Site RmpO Extract web pages via templates Template ampO Template extraction and generation WebBuilder bmpO HTML rendering for BBS-based services
bbsboard Internet to BBS email-post handler # BBS bbsboard Internet to BBS email-gateway handler # BBS bbscomd OurNet BBS remote access daemon # BBS ebx Elixir BBS Exchange Suite # BBSApp::Sync fianjmo Chat with a virtual personality # FuzzyIndex fzindex FuzzyIndex index utility # FuzzyIndex fzquery FuzzyIndex query utility # FuzzyIndex sitequery Metaseach multiple sites # Query
The OurNet:* modules are interfaces to Telnet BBS-based groupware projects, whose platform was used in Hong Kong, China and Taiwan by est. 1 million users. Used collaboratively, they glue BBSes together to form a distributed service network, called OurNet.
This module is merely a bundle over the seperated distributions on CPAN, so please refer to each individual modules and scripts' documentation for detailed information.
Please see http://melix.elixus.org/ for further references, and binary releases for Win32 and other platforms.
Below is an excerpt from Autrijus Tang's lightning talk session in TPC5, which gives a context of the OurNet development.
Most heavily hacked piece of code
OurNet is a cross-protocol distributed network built on top of telnet-based BBS systems, which is used exclusively in the Chinese speaking world, as they never got translated back. The server code is 'the' major GPL project in these regions, and was under heavy hacking for 8+ years.
Who is using it, and for what
There are est. 2-3 million regular users on thousands of sites, and many of them doesn't use browser as often; some doesn't use web at all. Lots of university departments, dorms, organizations are running their own BBS sites.
The BBS Mindset, or why Web hadn't replaced it (yet)
So for the users, the BBS is "the Unix shell for the rest of us". It provides public access to services resembling mutt, pine, irsii, talk, write, finger, lynx (and MUD), but organized in a consistent text-based interface.
People love it because it's real-time, and it perserved the 'community' flavor of the dial-up BBS era where you feel you're interacting with real people, instead of abstracted URLs and e-mails. You'll probably understand it better if you came from a dial-up BBS culture.
Inflexible Interface & Architecture
The BBS daemon code in C is comparable in size with the perl5 core, and has no clean plug-in interfaces, so things like Tamaguchi gets implemented like 20 times across 10 different forked versions. Also, there's no offline browsing, so you only gets to access your mail and usenet news when you're online.
The lack of Jabber-like presence and federated authentication presents another problem -- people have to remember twenty sets of passwords for different BBS sites, and instant message between these sites are all but impossible. Also, the only communication between BBS sites are limited to NNTP and Gopher; there's no frames, RSS, or hyperlinks at all.
No Privacy Whatsoever
Of course, sending your password over through a telnet connection is terrible, as is storing all your private mail and profiles unencrypted on server. but the real shock is because of this, governments actualy get to pass laws to say all BBS servers have to obtain real name, social security id and phone numbers for all users, and keep logs of their activities.
Hybrid Decentralized Authentication
So, about one year ago I gathered the Taipei.pm people working on gluing these isolated nodes together. One thing we tackled is the authentication model, in which your identity is just the GPG or PGP key ID, so we can get all mails one-way encrypted, etc.
It couldn't rely on any keyservers since the government could monitor them, so I'm going to implement "transient mini CA" objects that basically get store-and-forwarded in FreeNet and OurNet nodes, and each server could alias those keyID into their local usernames.
The Ultimate Jukebox: telnet://localhost/
So the new model is that every user installs a transient BBS server at home, which comes with a unified rendering and object model that renders queries from freenet, napster, mailbox, usenet, rss or even livejournal. We've also done a locale-enabled full-text inverted index engine that could work on all those services.
There's a couple CPAN modules I've developed over the past year that helped making wrappers around existing services. There's OurNet::Template, which is a subclass of the Template Toolkit, but instead of calling process() with a template file and a hash reference of parameters to produce a HTML, you can call extract() with a HTML file and template and get the parameter hash back!
We're working on the much more magical generate() function, which should take a HTML file and hashref to produce the appropriate template. There are also wrappers around telnet sessions (OurNet::BBSAgent), slashcode (Slash::OurNet) and other plugins that could render syndicated data back and forth in an improved, more secure PlRPC protocol that works with tied variables.
Agent Deployment and Code Injection
Since it is now possible to develop bbs components in perl, we're working on a system that lets the author sign it and distribute it across OurNet, so each node could look at the source code, run it in a Safe compartment, and if they like it, they could sign it to vouch for its integrity.
There should also be ircbot-like agents which could deserialize and walk through nodes, and do things like translating requests across heterogenous services.
Distributed Economy & Moderation
We're contemplating about how people could use it to form trust-ring-based economy system like Mojo Nations and Advocado. Also, we have a reasonable chance to solve the Slash => NNTP problem now.
Bring Power To The Masses
Currently we're doing i18n support and translating messages to English, and our company is sponsoring people to write related OSS packages, and users seem to like it, too.
At the very least, this OurNet thing got my mom started advocating on strong crypto and online privacy, so I think it's kind of cool.
The HOWTO documentation and BBSCOM API is still lacking; we'll be very grateful if anybody from the telnet BBS circle could contribute to it.
Autrijus Tang <email@example.com>, Chia-Liang Kao <firstname.lastname@example.org>.
Copyright 2001 by Autrijus Tang <email@example.com>, Chia-Liang Kao <firstname.lastname@example.org>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.