Architectural proposal

Michelangelo m.des at mac.com
Sat Mar 22 17:21:25 PDT 2008


Hello,

I've been thinking about this proposal for the whole day; William has  
suggested me to write it here, to hear directly from you, to hear your  
feedbacks and, most thing important for me, your objections.
Ah! I was about to forget, my name's Michelangelo De Simone, I'm very  
pleased to meet you all.:)

Synopsis
MacPortsDaemon (“MaPoD”) is an additional layer above the existing  
MacPorts utilities and API that provides asynchronous access to  
MacPorts functionalities (and new ones) to upper layer clients. It’s  
based on a pluggable architecture.

Visionary scenarios
Mike (limited user) wants to use an Adium version built on his own, to  
accomplish that he launches a MacPorts/MaPoD client, search for Adium  
in the search box, once he has found it he chooses to build and  
install it.
The client confirms the action to Mike and giving him a notification  
that his version of Adium will be delivered directly into his ~/ 
Applications folder once the build process is over. The client becomes  
immediatly available for new commands.

Amanda (limited user) already built Cyberduck but she needs it no more  
and then she decides to uninstall it. To accomplish that Amanda  
launches a MacPorts/MaPoD client, search for installed apps, once she  
has found Cyberduck she select it and mark it for removal. Her client  
confirms the action and becomes immediatly available for new commands.

John (administrator on his own system) decides that Mike and Amanda  
need Gimp, so he decides to build and install it in order to let  
Amanda and Mike use it. To do that he launches a MacPorts/MaPoD  
client, search for Gimp; once he has found it he tells the client to  
install Gimp system wide, for users to use it. His client confirms the  
action and becomes immediatly available for new commands.

Amanda (limited user) needs Gimp, so she starts looking for it with  
her MacPorts/MaPoD client and asks the client to build and install it.  
Client notifies Amanda that Gimp is already being built because of  
John choice to deploy it system wide and that she we’ll be able to use  
in some time; MacPorts/MaPoD will notify her with a Growl notification  
when Gimp will be ready to be used.

Mike (limted user) asks himself how to remove objects and “stuff”  
produced by MacPorts/MaPoD and finds out that there’s no reason to be  
concerned about because MacPorts/MaPoD mantains itself scheduling  
maintance operations at the right time.

Amanda (limted user) worries about tree sync and tries to manually  
update it using her client but it notifies her that the latest sync  
has been done automatically by MacPorts/MaPoD itself yesterday night.

MaPoD Architecture Overview
MaPoD aims to provide MacPorts additional features applying de- 
coupling among actual and future software components. See pic here: http://snipurl.com/22dyy

The whole architecture of MaPoD shall be developed as a system service  
(LaunchDaemon), letting the clients at the upper layer request  
services asynchronously  (“Build Adium, notify me when you are done”);  
users could also benefit from scheduled/automatic maintance operations  
such as self-update, application upgrades, tree syncs, objects cleanup.

MaPoD Core ‘s task is to accomplish basic functionalities, wrapping  
those already provided by MacPorts’ port and adding them mechanism  
such scheduling, permission managment, event notifications (“Adium  
succesfully built by John”). No user on the system should sudo to  
build an app for his own use.

MaPoD Interface is the real glue between MaPoD/MacPorts and GUI.  
Clients and MaPoD are completely loosly coupled because MaPod  
Interface provides a neutral way for them to communicate.

Third party MacPorts developers could develop plugins to extend core  
functionalities (“Build Adium, notify me when you are done with a  
Growl notification” or “Build Adium, notify me when you are done with  
an email to jdoe at apple.com”).

Conclusions
With the appropriate choices any user on the same system, even limited  
ones, would see a full-featured MacPorts “distribution”; any user will  
have the possibility to search, install (from source or normal  
binary), remove his application with no touch to MacPorts at all.  
System administrator would also benefit from a fine grained permission  
system (“Do not let Mike build Adium” or “John can build and install  
only between 3pm and 9pm”). MacPorts installation would be “piloted”  
by MaPoD itself, so there will be no need to sudo-run it for  
occasional users. It’s clean, it’s “secure” (you know, Santa believes  
in security...:)).

Whis this architecture possibilities are endless: how long would be  
needed to develop a plugin to mirror the tree among multiple nodes?  
How long to develop a web client and an adapter to manage the same  
build on multiple nodes?

Obviuosly MacPorts core should never be used by users/clients,  
preferring MaPoD way to accomplish tasks.

Back to the ground, there is much effort to spend and many issues to  
solve; first of all: how should MaPoD be launched, with whose  
privileges and permissions? Which technology should be used to develop  
all this stuff? Obj-C or C++ would be either good choices, once a good  
threading model has been decided (NSThread in 10.5 is a slightly  
forced choice).

What about dependencies overlap?

To respect decoupling how should MaPoD interface expose its own  
services? Stream/Socket interface?
-- 
// Et quid amabo nisi quod rerum enigma est?

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2409 bytes
Desc: not available
Url : http://lists.macosforge.org/pipermail/macports-dev/attachments/20080323/5a6d097a/attachment.bin 


More information about the macports-dev mailing list