[openbeos] Fwd: OpenBeOS suggestions (quite long)
- From: "Bruno G. Albuquerque" <bga@xxxxxxxxxxxxx>
- To: openbeos@xxxxxxxxxxxxx, glasselevator@xxxxxxxxxxxx
- Date: Sun, 28 Jul 2002 18:00:32 EST (-0300)
I am crossposting this to the openbeos and Glaslevator lists because I
think this is relevant both to current and future developments. The
original author is Marton Fabo <morton@xxxxxxxxxx> so you should
contact him if you want to discuss it further. I will be glad to hear
opinions about this.
----------
Hi!
More than a month ago, I threatened you with sending you some list of
points I think would be important to consider or take into account
while
designing/building OpenBeOS. Lately, I became a bit busy, but now I
fulfill
that threat.
Although I don't precisely know what the intent of the whole project
is, I
suppose that having the result become successful and usable (not just
for
geeks/hobbyists) is the goal, so I compiled my list with this goal in
mind.
Much of it is of a nature that has to be considered quite early in the
design process of the relevant subsystem.
So here it is, my brief points without any particular sorting, about in
the
order they came into my mind over the weeks...
Integrate as many concepts into the system as possible. This means that
if
some functionality is already implemented, then have the programmers
use
those, instead of trying to implement the same functionality on their
own.
The same goes for extracting information. And not just at the level of
APIs
and libraries, but in the user space also. Hope you get the point.
Investigate any existing libraries with similar (to each other)
functionality, and picking the one considered the best for "standard"
or
"default" for the system, whose presence any software can count on
(this
idea a bit modified below). Offer the other possibilities as options,
but
not recommended. If you can come up with better solutions than found in
any
of the existing libraries, then go and implement it. But if not, adopt
what
is already there.
Closely investigate existing operating systems, and their
functionalities.
Integrate any good ideas, parts, steal as much as you can, if you don't
already have a better solution. For example, the BSDs are full of
freely
usable code/functionality, which you can simply use or use them as a
starting point for a better solution. Example: NetBSD's package system.
A well thought-out package system. The current situation with BeOS is
miserable, at least with regards to consistency. BeBits may be a good
source for software, but it lacks a whole lot of concepts. Again,
NetBSD's
package system may be a good starting point, partly because it's
intentionally designed to be portable. I think it has some flaws yet,
which
you could do better with your system. This modifies a bit the idea of
having libraries always available for any software, as they can just
include the ones they need as their dependencies; but having preferred
solutions/implementations for specific functionalities is still
important,
partly because consistency and homogenity among software.
(Consistent) graphic interface for anything you can think of. Don't
force
the user to remember and use command-line tools, edit config files etc.
Here I mainly mean configuration panels, but anything can be thought of
that is part of the system, and the user has to interface with it.
Implement anything you can in the form of add-ons. Don't hard-code
anything
that isn't absolutely necessary to be hard coded. Having a system to be
modular in many aspects (in many more aspects than current systems use
to
be) is key to a great freedom, I'm sure you don't argue about this.
BeOS is
a good start in that direction, but this approach must be extended in
many
ways the BeOS didn't intend to. Apply this to things at levels as low
as
the VM or the executable format, or to things as high as the language
of
the interface.
Binary compatibility with the most systems you can achieve (Linux, BSD,
Windows, anything). Take already existing solutions for this. Have a
close
look at NetBSD from this point of view. It has binary compatibility
with a
great amount of systems, including, for example, Linux. The latter is
achieved by implementing (or emulating?) some Linux system-calls, and
mounting a file system of linux libraries "above" the normal file
system,
but only for linux executables. This is to avoid Linux execs trying to
link
NetBSD libraries. Consider this functionality very seriously, as it can
give you a great amount of working software out-of-the-box. Even
proprietary ones, that you can't just port, because the lack of
sources. I
know achieving this is a very big task, but the benefits are huge also.
Support mutiple executable formats. This partly falls in the category
of
having functionality implemented in form of add-ons (so that this can
be
extended by thired parties, without recompiling the system and sismilar
stuff). But even if support for various executable formats can't be
implemented in this form, but have to be hard coded, provide a variety
of
choices. I mean here native support for ELF, a.out (pre-R4 stuff, if
I'm
not totally wrong, right?), windows format (PEF, or what the hell), and
even Java bytecode. Again, take a look at how NetBSD does the same.
Programmer interface for any adopted libraries, that fits into the Be
API
(where this is possible), so that the programmer doesn't have to give
up
the Be programming style just because using various libraries.
Support multiple APIs simultaneously, for supporting different worlds
of
programming. Examples include the Be API, QT, Carbon, WinAPI, etc. This
would make source compatibility and (im)portability much greater. Of
course, keep a preferred one, which of course would be the (heavily
extended) Be API. Full POSIX support also belongs to this point.
System (API) level support for multiple languages. This would introduce
a
unified way of choosing the language for the system and for various
third
party software. Of course, the language must not be hardcoded into
localized versions of the system, but has to be switchable (on the fly,
per-user etc). The API should make it mandatory to allow third-party
localization of software, without access to the sources, and without
the
collaboration of the author. Adopt an existing system/implementation if
there is one that suits the requirements.
Steal hardware device drivers from existing systems. Hack together
quick,
experimental, unsupported drivers from any driver you have access to
(from
Linux, BSDs, Windows etc), just so that they work and somehow drive
their
respective HW, and then work them out correctly to be fully functional
and
stable.
If possible, support drivers from other systems (mainly Windows) in
binary
form. If you can achieve this, you immediately have an incredible
amount of
supported hardware. Of course, native drivers are needed for full
functionality and performance, and are absolutely and ultimately
preferred.
Certification system for software (and mainly drivers), just like WinXP
does. Correct notification and education of the user regarding the
issues/impacts of this system and decisions made based on it. For plain
software, I mean certifcation to be a quality/standards-compliance
assurance by some third party. Essentially the same as for drivers,
just it
doesn't influence system stability as much.
Close to the above is a system for signing drivers/software/packages by
authorities the user may or may not trust, and giving a chance of not
trusting unsigned software.
Real (not just planned) support for multiple monitors (I wrote above
that
there won't be any particular ordering :)
A concrete concept: a general interface to control and monitor the
status
of dialup (in general, non-presistent) connections.
Networked app_server (in essence, terminal services), with already
existing, or to be made client (possibly integrated into the app_server
itself). If a new protocol/implementation, then support for dumping
OpenGL
and such things across the wire, for better performance (essentially,
don't
render on the server side and then dump the image, but dump the
instructions, and render on client-side). This probably assumes having
both
the server and the client also integrated into the app_server.
Correct, and worked-out support for printing. This includes such
details
as, for example, the possibility to choose the desired printer just in
time
of printing from within the caller application, not only in the
printing
preferences panel.
Correct support for multiple users, with permissions, policies, all the
relevant stuff. Support for parallel sessions, just like X or WinXP
does.
Of course, all the stuff above and below don't have to be implemented
immediately, but the connecting parts of the system should at least be
designed with these things in mind, so that implementing them later
would
require a minimal amount of rewriting/redesigning. Somehow like Be were
aware of multi-monitor or multi-user support, but in much more aspects,
including my points, and many things I couldn't think of...
A much better Interface Kit. Having a layout engine, for faster
development
and having more homogenous, nicer software. Have sophisticated
controls,
steal ideas from Kai's software for example. I mean this absolutely
seriously. Anyway, investigate the latest UI researches, articles,
anything. Achieve to have a really sophisticated UI at the system
lavel.
A very stressed, and very complete documentation, which describes all
the
Concepts that live in the system. What APIs are available for various
tasks
the programmer may otherwise try to implement herself, by not even
thinking
of that the desired thing is available as a system concept. This
documentation should be easily searchable, by keywords. Bring this
documentation into attention very vigorously at the beginning of the
programmer docs, so that no programmer can overlook it. Have it in the
form
that any updates, new, adopted concepts can be merged into even local
copies, and have a system of notifying the programmers about adoption
of
such new concepts, so that they don't overlook any of them just because
it
wasn't available last time they checked.
Keep as much aspects (standards) of the system in central control as
possible (inter-app protocols, standard attribute names and sets, app
signatures, software qualification etc). This may look a bit
totalitarious
from the programmer point of view, but regarding that the whole system
has
to operate and cooperate inside one box, under the hands of one user at
a
time, I think this is much more important for the system for being
harmonic
and successful. Have a well working and fast system for proposing and
accepting new standards, so that this doesn't hold back programmers.
Always
keep (backward-compatible) extensibility of standards and protocols in
mind, because a fast system will always have more or less wrong
decisions.
Good, searchable documentation for the package system, so that the user
can
easily find out what is available for what she wants. Have brief,
short,
and longer description of software, screenshots where approriate (users
tend to like to *see* what they will get, before trying).
Never force the user to recompile the kernel or any part of the system,
if
it's not the explicit intent of the user. Particularly not for adding
drivers of any functionality. In essence, design the whole thing as if
it
were a closed project, and it has to work without the user even having
acces to what is needed to recompile anything. Be modular instead.
Have a software update-like interface to the package system, where
users
can (but only if they want to) be notified about available new versions
of
their installed packages (or anything they are interested in). Make it
possible to install/update desired software over the net or off CD or
from
local store by a single click. Have a way to automatically
find/get/download/install available drivers for any hardware the system
may
find, and for which there is not a driver in the base system (of course
with appropriate notification and confirmation). Update notification
for
this kind of software too.
Make updating the whole system or parts of it trivial. Of course,
preserving all the settings. Have the system itself in (below) a
distinct
location (e.g. /boot/beos), under which nothing will be changed in name
of
configuration. Have a location for local (machine-specific)
configuartion
parameters (maybe /boot/local, or /boot/local/config (to be more
similar to
user-specific settings)), and have the user's settings in her home
directory, as currently is with BeOS.
As a related topic, make an infrastructure (API) of scopeable settings,
that any software can use. So that for various parameters, there can be
install-time defaults, local, user-specific, document-specific,
software-specific (e.g. for non given-software-introduced settings like
language), session-specific values, each of which can refer to the
value
from the outer scope. All of these stuff should be trivially
programmable,
and where appropriate (e.g. not for session-specific settings) have
persistence. As reasonable, the respective values should be stored
under
/boot/beos or /boot/apps/<DEFANGED_apps-dir> (in non-changeable form),
in
/boot/local/settings or /boot/local/config/settings, in
$HOME/config/settings etc.
Allow the user to make a profile of the system (mainly regarding to
installed packages), and apply that profile to another system.
Make migrating the system (e.g. from one HDD to another, from one
machine
to another) trivial. Though assuming the current layout of BeOS, or
some
better layout, maybe along the above ideas, this would not need any
additional effort, as dragging/dropping the system would just do it.
Don't nag the user. Carry notifications for example the way WinXP does,
so
that the user can see them, but she doesn't get interrupted by them.
Have
this be configurable (sound notifications, logging of such things,
etc).
Always allow the user to turn off notifications about various things
(right
on the panel that does the notification, like a check box "don't warn
anymore"). For questions she has to answer, always give a possibility
to
avoid further answering the same question, by assuming the same answer
always. Have choosable scopes for such default answers or disabled
notifications (for a session (as defined by the runtime of a software
or
the system itself), for a given document, for the current user, for the
given machine). Make this whole thing a system-concept, so that any
software can use it. Promote the usage of this mechanism by
programmers.
As an addition, let me point out an article, albeit whose subject is
linux,
yet it contains valuable points of view; you'll know which of these can
apply to OpenBeOS. I just found it pointed to by OSNews today:
http://www.linuxandmain.com/modules.php?name=News&file=article&sid=145
Well, I already have my stomac hurting because of that much english
typing,
so I'll stop now. And I also reached the end of my list on the paper...
I
hope that if you are here, this means that you at least could fight
your
way through my tired and maybe hardly understandable lines. I even hope
that you'll consider some of them, and maybe you'll argue about some.
nah, logging off
mortee
----------
-Bruno
--
Fortune Cookie Says:
Excellent day for drinking heavily. Spike office water cooler.
- Follow-Ups:
- [openbeos] Re: Fwd: OpenBeOS suggestions (quite long)
- From: François Revol
Other related posts:
- » [openbeos] Fwd: OpenBeOS suggestions (quite long)
- » [openbeos] Re: Fwd: OpenBeOS suggestions (quite long)
- [openbeos] Re: Fwd: OpenBeOS suggestions (quite long)
- From: François Revol