theosib ([info]theosib) wrote,

What Apple gets right and why Linux keeps slipping behind

I'm a huge Free Software enthusiast. I founded the Open Graphics Project because I want to promote Free Software. I want people, users of computers, to have freedom and control over their computers. I don't want greedy corporations to limit our freedoms and hold us hostage to their DRM, unreliable licensing mechanisms, and a tendency to leave us holding the bag when they go out of business or decide that we haven't paid them enough money. I believe that if you have a piece of technology in your possession, then you have every right to take it apart, understand it, reverse engineer it, and use it however you like, until you decide you no longer want to. Of course, there are limits. Other people have rights too, and rampant piracy is not a good thing, but that is beyond the scope of this blog entry.

So, I think Free Software should rule the world, and I believe that it is an ethical issue, not merely a practical one. I feel that I am a minor activist in this regard. The more Free Software that people use, the more freedom we'll all have, and I am trying to do my part in my own community project.

At the same time, I'm also an engineer and a scientist. I think about the systems I use, critique them, and consider how they can be improved. As part of my Ph.D. studies at OSU, I'm minoring in Cognitive Engineering. Putting Freedom into people's hands is useless when those people can't figure out how to use what they have. Good design and usability are very important. I haven't paid enough attention to the recent discussions between Linus Torvalds and GNOME developers, so I can't address it directly. But what I can say is that a learning curve is not a bad thing. While it's good to think about the total novice, it's even more important to have consistent and logical mechanisms. This way, if someone has to learn something new to use the computer, they have to learn it only once. This is why I think it's good that Apple and Microsoft have UI development guides that encourage developers to make their apps act consistently with other apps in areas where their functionalities conceptually overlap. And this is where I start to get disappointed with GNU/X11/Linux systems.

This is a blog, not a book, and I have work to do, so you'll forgive me if my points of discussion aren't very well organized. If this were a professional article, I would have researched things more carefully, providing detailed citations. I provided a long intro to set context and explain why I think it's important that Linux systems should make some very radical catch-up changes to the organizations of their systems. What follows are some ideas regarding areas that, once fixed, would bring Linux systems into the 21st centrury and make them compete as well-engineered systems against the likes of Apple. Microsoft has copied a great deal from Apple, but they clearly don't grok the underlying concepts that Apple tries to employ. Alas, I fear that Linux developers also don't grok these ideas either, and also like Microsoft, they're too afraid to change, sticking to out-dated methods in the name of backward-compatibility or inertia or both.

Application executables and resources

Apple didn't invent the idea storing all application-related files in one place. I think I read somewhere that an early version of RISCOS did it this way, but Apple has adopted this idea very nicely, and Windows isn't too far behind. The basic idea is that most files for an application are stored in one single place. The application NeoOffice, for instance, has a directory (anywhere you want to put it, really) called NeoOffice.app. Under that directory are all of the binaries and data files associated with the base install of that app. Some structure is imposed so that MacOS knows where to look to find things, but the main idea is that if you want to run or manage this app, there is this one place to look. Installing or uninstalling is a matter of drag-and-drop. Running the application is simple too--double-click on the directory, and the right thing happens, with the folder acting as a representative, to the user, of whatever is in the folder. For the end user, this keeps things painfully simple.

Windows isn't too bad on this front. Under the Program Files directory, you find most of your major apps. The only thing they're missing is the directory-as-proxy mechanism. You have to know a little more in order to find the executable and run it, if you haven't already got a link to it somewhere.

Linux, unfortunately, sticks to its UNIX heritage of spreading things out all over the file system. Executables to in /bin, /sbin, or /usr/bin or /usr/local/bin. Shared objects go into /usr/lib or somewhere under /usr/local. Configuration files (all plaintext; see below) go somewhere under /etc or somewhere under /usr/local. There is a standard that describes in detail how things should be structured, but it's much too brittle. In theory, conventions, even complex ones, can be strictly followed, and everything works out well. But this is an example of a convention that adds just enough complexity and confusion that it doesn't get followed consistently, and the one left holding the bag is the end-user who can't figure out where their files are when something goes wrong. I've been using Linux a lot longer than MacOS, but while I can easily find whatever I want pertaining to an app in MacOS, I am clueless about Linux. And I've even installed a good number of Gentoo systems. The distinction is that the UNIX way is logical but arbitrary. The Apple way, on the other hand, is simply intuitive. That's why it's easier to remember and use.

Here, like for most of this article, I'm going to be pragmatic and suggest that Linux people adopt a Microsoft-like strategy: If you see someone doing something in a way that works better, adopt it. So, the solution for Linux systems is to gradually deprecate all of this /bin, /usr, /etc confusion (except perhaps for the most basic of system tools like find and ifconfig) and adopt a system that collects all files of each app into its own directory. And this should be done even if there is some redundancy! I think one of the ideas behind the UNIX way is that many apps will share resources. This was a good thing in the 1970's when resources were scarce. Today, however, this sharing often results in version conflicts that break apps and make life hard for users. Think of the users and make things intuitive, even if it results in some minor increase in complexity or redundancy for software developers.

Configuration data

Microsoft almost got this right. With the introduction of Windows 95 came the introduction of a centralized registry for all system and application configuration data. It's a hierarchy of key/value pairs accessible from any application. In principle, this is a rather nice way of doing things. The OS provides a simple mechanism for apps to keep settings in a database.

Users of Windows and other systems panned this approach for one good, practical reason: It's unreliable. Although things have improved, registry corruption is still the bane of the Windows user. Install a new app, and it or the OS does something weird, and bang!, the whole registry is hosed, requiring a complete reinstall of the OS. Single points of failure are bad.

Because of a strangely black-and-white sort of thinking, GNU/Linux systems have avoided anything remotely like a registry and stayed stuck in the dark ages with respect to config files. Stored in seemingly random places, every application keeps their own config files in their own special formats, in plain-text ASCII. Despite being littered with comments, most of them, when you can find them, are basically impossible to figure out. Some apps provide GUI tools to edit them, which is great, but they're not always available.

But an even bigger problem, the one thing that made me ditch Gentoo completely and get frequently very annoyed at Ubuntu, is the nightmare of application upgrades. If you have made any changes at all to an application's config data, and then you want to upgrade that app, you have three choices: (1) Keep the old config file, not benefitting from any new options or defaults provided by the upgrade; (2) use the new config file, tossing out all of your changes, requiring you to redo them all; or (3) go through a painful largely-manual merge process, often guessing about the meanings of any new options you find and whether or not your old change is appropriate for the new version. From first-hand experience, I can tell you that this is a very tedious and error-prone process that can leave applications completely broken. For instance, every minor KDE upgrade under Gentoo would leave me finding that some standard KDE app was completely missing, and no one in the Gentoo forums could help me figure out what happened. (And that was after manually sifting through a few hundred config files that were updated.)

This total lack of a standard is a huge embarrassment for Linux.

Apple, as always, struck an elegant balance. In two intuitively predictable locations (one system-wide, the other per-user), you can find a big directory full of property list files. Each .plist file is associated with an application. This approach solves a number of problems. First, an application editing its own private registry won't corrupt anyone else's, because they're all in separate files. Secondly, if you want to find the config settings for an app and edit them directly (does happen now and then), you can isolate them, back them up, delete them, or whatever, without affecting any other apps. Bad things happen in MacOS just like in Windows. But while removing the registry entries for a Windows app can be difficult and dangerous, dragging a .plist file to the trash under MacOS is a simple and safe way of fixing many application problems. On top of all of that, upgrades are always easy, because structured config files are easy to merge. The format of the .plist files is either ASCII XML or a binary encoding of the same data (faster and smaller but not editable in vi).

My suggestion for Linux: Switch to using ASCII XML config files for all apps, highly restricted to store only key/value pairs, and organize them all in a single central location. Provide a shared library that all apps can link to that manage these mini-registries. Make virtual merging of system-wide and per-user config files seamless and automatic in the shared library, often making upgrade merges unnecessary. With this approach, management becomes as simple as it is for MacOS. Upgrade merges become easy, because a generalized system can be used on any config files, regardless of which app they're for. We could also take it one step further and provide meta-data to the generalized merger that tells it how to resolve conflicts between upgrade values and user-supplied changes.

Clipboard

X11 basically lacks a clipboard. Instead, the basic X11 cut/paste mechanism is based on a convention of storing information in atoms on the root window. This is another example of a lack of standards. Due to the severe limitations of the basic convention, the desktop managers have devised their own extensions to it in a valiant attempt to add some usability. Unfortunately, they all do if in different, incompatible ways. As a result, GNOME, KDE, and Motif apps don't interoperate well. For instance, one of my favorite editors, Nedit, won't work correctly with the clipboard under KDE or GNOME. The problem here isn't a technical one, however. Like so many other problems with Linux, it's all about ego. Everyone thinks their way is the best and has no interest in adapting to other conventions. The developer of Klipper (KDE's clipboard manager) has even gone so far as to publicly refuse to work with other developers to resolve these problems. He wrote a long article, describing the challenges and his solution (a very sensible one), but then goes on to basically say that it's everyone else's responsibility to adapt to his way. I and others have tried to talk to him about the problems of Motif/Lesstif, but he just blows them off. The fundamental problem is not that he won't work on the other apps (that would be unreasonable, because he's a busy person), but that he won't even talk to other developers and try to come to a working compromise. GNOME has similar problems. Of course, they're not totally to blame either; I've also filed bug reports on Lesstif, just to be completely ignored. No one wants to work together.

Some links on this topic: Article by the Klipper developer, Ubuntu bug report, Nedit list discussion, Lesstif bug report, KDE bug report, Another KDE bug report.

Ego is the problem

Here we are exposing one of the fundamental problems of Linux systems. It's all about ego. Windows users are elitist snobs because they use the dominant platform. Apple users are elitist snobs because they use the "cool" computers. And Linux users are elitist snobs because they use Free Software. What sets Windows and MacOS apart from Linux is that Linux doesn't separate the developer community from the user community. This has obvious advantages. But it also has some major drawbacks. To a noticeable degree, Linux snobbery permeates the development process, while Apple and Microsoft keep a much cleaner separation. Most Linux developers do what they do because they have a passion for it, which is great, but that also means they are sometimes stubborn and unwilling to cooperate with others who think differently. At Microsoft or Apple, a committee decides on APIs and system conventions, and then some coder is paid to implement it that way; as a result, applications see a consistent organization and set of system services. Linux follows a completely distributed development model, where often, it is individual developers who make unilateral decisions about system organization and architecture, quite frequently eschewing established standards (when there are any). I don't know how to fix this problem, but I believe it is a major barrier to Linux's success on the desktop. If it can't be fixed, then Linux and Free Software won't dominate.

This reminds me of a discussion I observed when I was on the Linux Kernel Mailing List. Kernel messages through a user-space daemon to be logged. In general, because message strings take up space, we would prefer to not keep them in the kernel. Instead, if we could number them, we could then have the userspace daemon translate them on their way out to the log file. Many people agreed that this would be a good idea. But it was ultimately rejected. Why? Because there could not possibly be a central authority who could manage the numbering of these messages. Kernel development is just way too distributed. What a pity. As it turned out, however, the messages only took about 6% of the kernel space in the first place! So, really there was no big loss. But this is a good, clean, sad example of the sorts of challenges that Free Software developers face that are not problems for the commercial developers.

Perhaps someone will respond by saying that too many standards restrict creativity. But I agree. If the system architects try to dictate everything down to the finest detail, then you'll end up with a monoculture, and everything will be totally boring. But notice that MacOS isn't boring, despite having standards for things that Linux doesn't even address.

My suggestion to the Linux community: Put aside your egos and work together. Stop all of your egocentric bickering and let reason work out who is right and who is wrong. Develop good standards and stick to them. Of course, no one can develop the perfect system, so you eventually have to declare a version "good enough" and move on. But be willing to make drastic changes when a better idea comes along! Empirically, we can see that Linux does many things in a way that is inferior to other systems; adopt those ideas quickly. And most importantly, put some thought into how the end user (novice and power user) will interact with the system, at every level. Taking a lesson from Donald Norman, we should strive to put more knowledge into the world and reduce how much knowledge must be kept in our heads. If you have to make a choice, favor intuitive options over ones that require learning, and when something does have to be learned, be sure that your new convention applies as universally as possible, minimizing what has to be learned in the future.

Conclusion

One of the things I'm implying here is that the Linux community should form standards committees. I've been indirectly involved in standards committees, such as the VESA DPVL committee, and it can be a painful, glacial process. But this pain is necessary if we're to come together and develop elegant systems that work well in the enterprise and on the desktop. Indeed, there are already many Free Software community organizations that develop standards. DRI is one such example, providing a rendering infrastructure that fits into Linux, *BSD, and Solaris. Similarly, my friends with the Open Hardware Foundation are working hard to bring together hardware vendors and projects to develop hardware standards for the good of Free Software. It's been pointed out that Linux isn't any more of a bazaar than Microsoft is a cathedral, so let's not be afraid to develop hierarchy, particularly ones that make it easier for us to nail down what would otherwise be arbitrary choices anyhow. Linux distros and community projects can add representatives to committees that decide things that would constitute sweeping changes to the way we do things. Without a democratic body to do this, it may be impossible for us to identify, decide, and make the changes that we really need to make to keep up.


Update

[10:07pm] A very kind commenter was nice enough to point out GoboLinux. This takes the NeXT/MacOS approach even farther and packages even basic system tools, like the BASH shell, in their own application directories. Also check out the Wikipedia article on GoboLinux for an overview. I'm downloading it right now, and perhaps in a later blog post, I'll mention some of my impressions. Just because the files are organized better doesn't mean it's got the same surface polish as, say, Ubuntu which is great to use unless you have to tweak the underlying system directly. So we'll see. Thanks!

[10:48pm] Well, I downloaded the GoboLinux ISO and tried to install it under Parallels. Parallels instantly pops up a bug report dialog, telling me that there's been a fatal error in the VM. So I submit the bug report. Speaking of Parallels, I've tried emailing them on a number of occasions regarding technical problems, only to be completely ignored. One time, I emailed them just to ask if they actually ever respond to customer emails. They ignored that too. The email is getting through, because I do get the automated response. It seems that Parallels are not too interested in customer service. Especially considering that they charge you the full price every time you upgrade, I have no incentive not to consider something like VMware instead next time. It's probably rude, unprofessional, and inappropriate for me to make a comment like this in this context, but it really makes me angry when I pay $80 for a piece of software, and the vendor treats me like I don't exist. It's one thing if you don't get support from projects done by unpaid volunteers, but it's entirely another when you pony up money for a broken piece of closed-source software.

[11:06pm, March 31] Still haven't tried GoboLinux. I'll have to try a live CD on real hardware some time soon. Some people mentioned also "klik", which I think is also a brilliant solution. It looks to me like I am not suggesting anything that hasn't already been tried. Well, it was already tried on MacOS and whatever it inherited from, but what I mean is that there are Linux people out there who are actively working on these ideas too. Some combination of GoboLinux and klik, I think, is exactly what we need to get out from under some of the architectural cruft that holds Linux back and start becoming competitive. Ubuntu does a great job of putting a nice face over a disorganized mess, but that's all it is -- a bandaid. We need to design systems to be intuitive from the ground up, not paste make up on top of blemishes. Once all of that is fixed, we can start looking at what another commenter mentioned: How the Mac does code reuse brilliantly.

  • Post a new comment

    Error

  • 165 comments
Previous
← Ctrl← Alt
  • 1
  • 2
Next
Ctrl →Alt →

Anonymous

March 30 2007, 21:09:30 UTC 5 years ago

Application executables and resources

Excuse me, but why the heck should I know where the applications install their files? I know that I have application XYZ installed, I know that I can launch it with a click on its name in the menu, I know that I can remove it with two clicks in my package manager, so why should I worry if application XYZ installs all of its files in XYZ.app, Program Files\XYZ\ or in /usr/bin, /usr/libs/ and /usr/share? I'm not supposed to manipulate those files, just to launch the application and manipulate the file I created with that application.

Anonymous

March 30 2007, 21:27:31 UTC 5 years ago

Re: Application executables and resources

Why? Because sooner or later you will need to explore the files being used by an application. Even if it something as simple as the "README" file that came with the application. On Windows/Mac, it is easy to peruse these files. On Linux, well....

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

March 30 2007, 21:37:59 UTC 5 years ago

Free Sofware

I think you fail to recognize the special requirements/context of the free software ecosystem. There is no single platform backed by an army of engineers and researchers producing stuff that the management then decides to include or not. Instead we have thousands of platforms all very similar but also very diverse. We need to try out new designs and new innovations in the platform out there in the field. Thus we need support for diversity, interoperability and reusability all at the same time.

There is even a case to be made from the ease of which one can manage lists of stuff in a Unix system. Because nearly everything is provided as files it's a small thing to collect lists of files and do manipulations on them in big batches if the need arises.

I agree that the current FHS is not that good and lumps of configfiles or gconf like systems aren't much better. Even worse is how the file system fails to provide a consistent interface to the system. Fixing this by stuffing things in their own little data islands isn't a fix for this though. Instead I respect how Plan 9 tries to get the file system api even more consistent but it might be too little.

XML gave us an ability to express general hierarchical data structures with strong semantics and typing support in schemas/DTDs and nice higher level stuff like RDF and OWL. But seriously XML as a syntax just sucks, it's absolutely unusable for anything. Maybe what we need is to adopt these technologies and evolve the file system metaphor to support better semantics so FHS and registries like gconf and other standards could be implemented as schemas/types. Maybe hierarchical name spaces was just wrong to begin with and we should instead focus on getting a solid relational model designed as a system API. The general theme in any case is a unified strongly typed storage for data and metadata.

[info]theosib

March 30 2007, 22:03:53 UTC 5 years ago

Re: Free Sofware

Clearly, the ecosystem is one of those "obvious" advantages to the way the Free Software community works. There should be (and is) plenty of room for experimentation. In fact, how else would you decide to adopt a new way unless you try it out? And a new way would violate the existing conventions, of course. The problem is that the FOSS community does not pool together their most recently-learned lessons and implement them. The freedom is there for the developers, but for the end user, the system should be consistent. Think of the whole system architecture as having DEVELOPMENT and RELEASE versions.

Consider Ruby. At the moment, they are working on the 1.9 version. 1.8 is the stable and released version. 1.9 intentionally violates a lot of the semantics of 1.8 in preparation for developing a new, consistent model for the next version 2.0. The Linux kernel goes (used to?) through a similar development cycle where radical experimentation was tried out.

Linux and FOSS should not change their development model. They should not change their community. However, they SHOULD put some of their energy towards creating stable end-user systems that are consistent and easy to use. That will involve some standardization.

As was pointed out, even MacOS has /bin, /etc, /usr and all of that. It's there to maintain backward compatibilty, and it's deftly hidden from the typical user. Linux should not get rid of those things immediately. /bin, /etc, and /usr would stick for another 10 years, at least. But they would contain only the most low-level system tools, never any user-installed apps.

[info]7wrc

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

March 30 2007, 21:38:09 UTC 5 years ago

GNOME HIG

You obviously haven't heard of GNOME's Human Interface Guidelines - http://developer.gnome.org/projects/gup/hig/

Dumping the Filesystem Hierarchy Standard is not a good idea, Even your beloved MacOS X uses it (hidden somewhat though).

Why would you want to know exactly where a program is installed, GNOME KDE and Xfce all have application menus you know.

[info]theosib

March 30 2007, 21:50:18 UTC 5 years ago

Re: GNOME HIG

As someone kindly pointed out, not every app is available from your distro's software repository. And not every app shows up in the GNOME menus automatically. On MacOS, I try out beta software all of the time. On Linux, I avoid downloading and installing tarballs, because I'm afraid I'm going to break something controlled by the package manager.

Anonymous

5 years ago

[info]theosib

5 years ago

Anonymous

5 years ago

[info]theosib

5 years ago

Anonymous

5 years ago

[info]kandyneko

March 30 2007, 22:56:30 UTC 5 years ago

This seems a little silly. I put in an ubuntu dvd, got a consistent, clean GNOME desktop, complete with add/remove programs in a simple place on the menu, thousands of programs handled by the package manager, and firefox, gimp and openoffice.org already ready to go.

Let's say a program is not in the package manager. Then there is a special need for it, and a little reading is required. If something isn't supported by windows or apple, it's just plain broken. If it isn't easy in linux, at least it's possible to do somehow.

Linux desktop isn't usable? No standard locations for files? Are you using the same system I'm using?

Linux without desktop is fast, unbloated and doesn't autoconfigure itself or break things without asking. It's what a server is meant to be.

Windows programs are definitely not consistent even with Microsoft software alone. Configuring things like IIS and basically anything serious and server like on Windows is a nightmare requiring hours of reading of google and msdn. And it's all changed on Vista and will be different in 3 years promise.

[info]katietedus

July 16 2008, 06:01:38 UTC 3 years ago

The reason they can't just build a package management program that can just automatically install from vanilla (ie.

Anonymous

March 30 2007, 23:59:07 UTC 5 years ago

i actually agree to most of what you've said, to some degree (i do love ASCII configuration files, though i admit it needs improvements for the reasons you've mentioned). also, gnome uses their gconf tool which acts as a windows-registry for gnome application. needless to say, i hate it.

regarding the filesystem hierarchy, i suggest you take a look at http://www.gobolinux.org/ which implements exactly what you've described (they also use some kernel patches to make their work transparent to the endusers).

and last thing, i recon most of the article can be summarized in "standards, collaborate, domination" :)

[info]katiebipef

July 16 2008, 16:02:57 UTC 3 years ago

Org/wiki/Cedega Posted by: Paeniteo at February AM The last version of Windows that I actually liked to some degree was NT 4.

Anonymous

March 31 2007, 00:49:14 UTC 5 years ago

Configuration data and libelektra

Ever heard of the Elektra Initiative (http://www.libelektra.org)? It more or less solves the configuration data problem you outline. Check it out.

Anonymous

March 31 2007, 11:31:02 UTC 5 years ago

Re: Configuration data and libelektra

Only that nobody wants to use it, despite author pimping it everywhere.

[info]selenation

5 years ago

Anonymous

March 31 2007, 02:07:42 UTC 5 years ago

You are right on.

I have been using Linux since 1994. In the late 90s and early 2000s I experimented with other Unix systems. Then for the last 5 years I decided to stick with Apple (As my early childhood screams at the though). In order for Linux to gain market outside of the server area they will need to compromise even though it may not be the best technical solution having a clean set of rules to follow is key.

[info]rachellewuxev

July 16 2008, 21:41:50 UTC 3 years ago

I have been using it since it came out. The question I have is that every now and then I will go to load a page and it says Cannot Resolve Host.

Anonymous

March 31 2007, 04:09:46 UTC 5 years ago

Apple, linix, MS

I just recently switched to a macbook. Ive been a long time linux user and various flavors of windows dating from windows 3.0 to the present windows Vista. All three os's are on my macbook. But I find myself in OSX more than any of the other 2 os's. Although ubuntu is my favorite, Ive come to really appreciate how OSX is put together. Its got lots of polish, a unix background, and it is fairly easy on memory. My heart will always belong to linux, My mind belongs to OSX , and well windows is last on my dance card... :)

PS I didnt like paralells at all. I tried VMware Fusion and thought it was much better for playing with linux while in OSX.

Jeff

[info]hopethishelps2

March 31 2007, 05:50:42 UTC 5 years ago

You have some major misconceptions

There is a very good reason not to put "everything" associated with an app in one place: shared libraries. When a bug in a shared library gets fixed, every app using it gets the benefit of the fix. Windows also has shared libraries (it calls them DLLs) but because of a flaw in the specification of how DLLs are used, they are a source of problems. In most Unix-like systems they are not. And maybe you can afford so many gigabytes of main memory that it doesn't matter if loading 3 apps loads 3 copies of all the common libraries, but most of us are not in that happy position. Shared libraries save a lot of main memory which translates to much better performance.

You do make a good general point, though, that GNU/Linux would benefit if developers actually took the usability guidelines seriously (which includes discussing them as well as implementing them).

Anonymous

March 31 2007, 12:16:16 UTC 5 years ago

Re: You have some major misconceptions

If that is the case (eg shared libraries are loaded multiple times) then there is a problem. By default you should be able to have residing on your hard disk multiple copies of a shared library. But whether or not multiple copies are loaded into memory depends on the operating system. I know .NET looks in memory before it loads an assembly.

Having a bug being fixed automatically is not an automatic reason to use shared libraries. I have encountered many situations where a bug fix in a shared library has caused problems to creep in other applications. Whether or not a new shared library is used is dependent on the application, and not the shared library.

Anonymous

5 years ago

[info]theosib

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

March 31 2007, 10:49:34 UTC 5 years ago

klik solves some of your issues

"Linux, unfortunately, sticks to its UNIX heritage of spreading things out all over the file system." -- Do you know http://www.klik.atekon.de/ klik? It is a project that packages Linux software as "compressed application images" - basically bundles (like Apple's) contained in a single filesystem image (like Apple's .dmg disk images). In effect, klik follows the "one application = 1 file" principle.
This offers Linux applications a whole new world of opportunities that are well-known in the Mac world, such as running multiple versions at the same time, and running apps from USB drives. Look at http://klik.atekon.de/presentation/ if you are interested in details.

Anonymous

March 31 2007, 13:06:55 UTC 5 years ago

One application = 1 file

Think about it. Pure elegance.

(And no, if done right that does NOT mean that every applications comes with yet another copy of the same libraries.)

Anonymous

5 years ago

[info]jamiegako

5 years ago

[info]sandylifo

4 years ago

[info]eszterubof

4 years ago

[info]rubypuzy

4 years ago

[info]katuwix

4 years ago

[info]darawuto

4 years ago

[info]kingajyte

4 years ago

[info]nickyweri

4 years ago

[info]mickysome

4 years ago

[info]janicesezo

4 years ago

[info]judezagi

4 years ago

[info]tamaravyto

4 years ago

[info]alexoped

4 years ago

[info]aliciajari

4 years ago

[info]bwelmers

March 31 2007, 11:11:34 UTC 5 years ago

I don't agree the actual basic problems with the current linux file system hierarchy and configuration file problems.
I've learnt how to it works back in 1996 and it still works almost the same today and comes intuitive and logic to me, I know where to find everything. README's and docs in /usr/share/doc, system wide config files in /etc or {hierarchy}/etc, user level config files in $HOME/.programname. On Windows I always found it to be one big mess with files all over the place that needs to be writable by the user, and random configuration options in one big database called The Register, which is hard to maintain and easily breaks the entire system when it becomes corrupt. It's no options to store _all_ the config options of every application this key->option way so you still keep config files randomly placed everywhere because there's no standard that says where to put these files. I therefore see no need for a obligate configuration (XML, key->option, whatever) file format, it's up to the application to decide. I'm glad most of the current linux application config files are plain text and therefore easy to understand, adjust, and maintain.

About the FS criticism, I still see much more useability in the unix way than windows/macos way:

/{lib,sbin,bin,etc,...} => essential system libs/utilities
/usr{/lib,/sbin,/share,/bin,...} => softare delivered with the operating system, often maintained by the package manager
/usr/local => hierarchy for locally installed programs out of the package manager
/var => all variable/short living data, very nice to have this in a separate tree so you can store it on a separate partition/device which is more suitable for this kind of data and don't affect the rest of the file system.

AND:

/{usr,opt}/Program,Category_name/{lib,bin,etc...} _your_ favorite way to install optional software by category or program name. For example, NetBSD installs it pkgsrc based/maintained software in /usr/pkg, Gentoo installs its kde suite in /usr/kde, Solaris installs its office suite in /usr/staroffice, and I on my Debian system install VMWare in /opt/VMWare.
I however don't see the need of installing each tiny package in a separate "hierarchy". For example, how about all essential libs get duplicated into each program directory? Instead, it's better to categorize it.

Sure, there are some drawbacks, and there is room for improvement, a radical change in the fsh like Gobolinux is a very interesting project, but I don't see this become widely used, because there already is a standard that works well for the most for several decenia.

[info]randomshinichi

March 31 2007, 12:07:13 UTC 5 years ago

In a lot of discussions about how some part of Linux should be improved, there invariably is a person who says 'it works, here's how it works'. The point isn't that it works. Of course it works, otherwise nobody would be using Linux or Unix. The point is that it can be made to work better, more simpler, and right now things are staying stagnant/going in the opposite direction as more and more people embrace this (like the poster of this comment) complex situation and fail to recognize that what we are calling for is simplicity, and not something baroque and complex based just on the merit that 'it works'.

Let's take a quote here to show how Windows has a better (okay, okay, maybe not that much better, system32 is a mess, but it's better):

/{lib,sbin,bin,etc,...} => essential system libs/utilities
/usr{/lib,/sbin,/share,/bin,...} => softare delivered with the operating system, often maintained by the package manager
/usr/local => hierarchy for locally installed programs out of the package manager
/ var => all variable/short living data, very nice to have this in a separate tree so you can store it on a separate partition/device which is more suitable for this kind of data and don't affect the rest of the file system.
Windows: \Documents and Settings\username\appdata user specific settings
\Program Files\ Program (program, global settings, libraries, uninstaller)
somewhere else in the filesystem: binaries linked to a library that exists in its own folder, which spares one from having to recompile the application just to link to /usr/lib/library instead of /usr/local/lib/library.

No offence meant, bwelmers. My point is that even though some people may think it's intuitive, it's due to years and years of experience. It doesn't have to be like that.

[info]bwelmers

5 years ago

[info]randomshinichi

March 31 2007, 11:57:03 UTC 5 years ago

Basically, too many cooks make a bad broth. This is very true, but a lot of Linux fanatics out there just won't listen. I bet this post hasn't been Slashdotted yet. Once it does, the rage of the entire world will descend upon you.

It's a sad truth about Linux that their most touted feature, package managing (just type in apt-get install zsnes!) isn't really needed if only Linux programs took better care of themselves and didn't sprawl around like a spilt bowl of lard. Sure, they automate this process and that. But who cares... what can Linux do when I want to find out what files did the program install? Don't give me that bullshit that 'you don't need to know because all you do is run emerge clamav or pacman -S clamav, go to /etc, retard, because that's where all the config files are.... oh and read the documentation, because you would then memorize the locations of where all the files are, like /usr/share/doc or /usr/local/lib or /usr/lib or /usr/bin or /usr/local/bin or even /opt, which we can't agree on how to use or whether to include'. Why wouldn't I not need to know anything? What wouldn't the user not need to know anyway, if he wants to know it?

I recently hosed the package manager database on my Arch Linux machine. One little file. Guess what: I had to reinstall Linux to prevent future updates from hosing the computer. I admire GoboLinux for daring to be the one that actually breaks out of the mold and actually improve Linux by simplifying it, not learn about an ugly, complicated way of doing things and cling to it for life, just like those vi users out there.

Let's move on. On to how GTK2 apps look like complete crap under anything else, that is. I care about how my desktop looks... and sure there's a nice little hack called gtk-qt, but that's not what I mean. Why don't GTK2 apps look good wherever they run in? They could at least bother, right? What are they trying to do, blackmail me into using XFCE or GNOME if I want a pretty working environment? Screw this, I'm using bb4win on Windows XP, or Vista. Enlightenment DR17 looks good. Too bad once you launch some app in it, only the titlebar is going to look half as pretty as the rest of the environment.

Anonymous

March 31 2007, 16:56:58 UTC 5 years ago

Use the pretend option that nearly all package managers have dumbass! Don't bitch if you're too fucking stupid to learn how to do things.

[info]theosib

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

March 31 2007, 12:54:57 UTC 5 years ago

FYI: Source of .app concept

FYI: The concepts of ".app", ".plist" are due to the NeXTStep/OpenStep heritage of MacOSX. Next's Mail.app used to have emails in a one message -> single file + attachments as subdirectory, which allowed "no duplication of attachments" for mail tool independant access to the files (think of Outlook here -- but this approach has big probems nowadays). Also one of the good ideas of Next was the "services" concept + menu entry. Therefore one shared spell checker /text converter/ .... for all apps was enough. This meant that I could use my bought spell checker in Framemaker, ... for emacs, Mail.app, TeX.app, ... or that I could use the OCR component within any picture viewer and have the results pasted right thru as RTF formated text to Textedit or a ASCII to emacs.
(Maybe the Humanized guys will bring back some of these ideas).

Cheers

[info]evildrgo

March 31 2007, 13:47:02 UTC 5 years ago

Your FSF observations are clear examples of lack of leadership. I have seen lots of commercial software suffer from similar issues, and I believe it is a clear undefined vision of things, lack of standard imposition and leadership. I'll cite examples later after i finish my actual work.

Cheers

Anonymous

April 1 2007, 15:06:14 UTC 5 years ago

Lack of leadership

Nothing to add cause I totally agree with you. Free Software lacks of leadership.

[info]rennabypu

5 years ago

Anonymous

March 31 2007, 14:00:59 UTC 5 years ago

That's not all

Application bundles and .plist files are good ideas, but that's not the half of it.

OS X also leverages Objective-C. GNOME and KDE are stuck on C and C++. (And no one uses GNUstep, so it's not had enough time and care spent on it.) I think people who don't know OS X well don't realize what this really means. There is all this system-wide functionality that is simply available "for free" to any application that uses the Cocoa Frameworks. On OS X you can get, for example, spellchecking and word-completion in any text-field, using a system-wide dictionary. Windows and the desktops commonly used on Linux don't really understand intelligent code re-use and are living in this fragmented world where people have continually to re-invent the wheel. You'll have several dictionaries on a machine, one for any application that needs spellchecking, and you have to train them all. That's ridiculous. And this is just one example.

I wonder how many realize just how fast application development can be on OS X either. Here's a comment from one developer:

"Suddenly this looked like a problem I could solve quickly, and so I took a few hours one evening and wrote a prototype. I say that not to brag that I’m such a fast programmer, but rather to illustrate how important it is to have a good framework like Cocoa. It really lowers the activation energy for starting a project, and that can make a lot of interesting things happen."

http://daringfireball.net/2003/09/interview_michael_tsai

It's not surprising that significant numbers of Java and .NET developers are starting to play with Cocoa and getting bowled over by what they find.

There is also the matter that Windows--and, therefore, GNOME and KDE, which copy it--fails to distinguish between a program and its windows. See the following article on the target-action paradigm:

http://rixstep.com/2/20050529,03.shtml

There simply is no mature desktop capable of running on Linux that leverages Objective-C and that offers true application-centered menuing. (Shifting the frontmost window's menu contents into a menubar, as is possible with KDE (System settings > Desktop > Behavior) doesn't count.) There is also nothing that has the kind of drag-and-drop support OS X has.

I think most Linux desktops have made bad choices and gone so far down the wrong turnings that the situation is now not easily recovered. As for Linux users, most seem to think that Beryl is "the answer". If it is, the question must have been a stupid one. There are far more fundamental problems in terms of design and usability with the Linux desktops currently on offer, and while some subtle effects in a GUI can be nice, when overdone they are simply annoying and obtrusive.











Anonymous

March 31 2007, 16:58:52 UTC 5 years ago

Re: That's not all

That is actually a very excellent example of mac os x superiority. :-)

Anonymous

5 years ago

Anonymous

March 31 2007, 14:02:50 UTC 5 years ago

Linux needs an OO layout, like OS X

Mac OS X apps are a specific type of bundle. A bundle is a self contained directory that I think is a lot like an object in the object-oriented sense. It contains (encapsulates) both the binary code (behaviour), resources and meta data (data).

Resources are things like UI layout (ie. nib files, which themselves are a bundle), images, icons, help files, etc. Meta data is stuff like version strings, a list of what files types the app can edit and/or view, the icons associated with those, etc. The app bundle may also contain other bundles, like private frameworks and plug-in bundles.

It's all self contained and relocatable to anywhere on the system at any time (including external disks).


The Linux approach to apps is based on the 30 year Unix design. I think this is more like spaghetti code: various parts of a whole are spread around in 'some' arbitrary manner. It doesn't matter what the manner is, the whole is broken apart with now way of knowing what parts make up the whole. Worse, new software builds upon this spaghetti.

Linux needs some form of bundle system, ie ENCAPSULATION. For example a Linux bundle may have meta data that says 'I provide these commands to the command line' from within its bundle. The system could AUTOMATICALLY enable this by maintaining some form of a smart $PATH object. The system caches a bundles' meta-data whenever one is copied or moved on the system. The bundle remains relocatable. Whenever it's moved the system updates its cache. Well that's sorta how OSX works I believe (see OSX Launch Services for example).

Of course most Linux software is written in C so it takes longer for OO principles to sink in. Linux needs to move on from a 30 year old, fixed and fragile, design.

Anonymous

March 31 2007, 14:07:08 UTC 5 years ago

Wow, GoboLinux is organized much more intuitively. That's exactly the direction I'd like to see other distros take. Keep the legacy locations around as symbolic links to maintain app compatibility, but hide them from cluttering the view so we can move forward with a better model. Very nice.

Anonymous

March 31 2007, 14:25:13 UTC 5 years ago

corruption in cause of different versions

there is a point the author not mentioned and which is another good reason for putting files together in one directory. did you ever installed software self-compiled from svn/cvs? i did and ended up wondering why after a long time some new applications wont get to work. the cause were some of the old files not uninstalled (cause they where not installed by rpm/portage/apt) but considered by the new apps. if they had been placed in their own directory it would have saved me a couple of hours searching logfiles.

Anonymous

March 31 2007, 17:02:22 UTC 5 years ago

Re: corruption in cause of different versions

When you install from source you are NOT supposed to do

./configure;make;make install.

You are supposed to do something like this--

you do ./configure;make but then stop! You have to call your package management tools to roll your build into an rpm, deb, tgz or whatever and then you use your package manager to install the software!

Why do you do this? You do this so that you can just use your package manager to upgrade/remove etc the package later.

[info]theosib

5 years ago

Anonymous

March 31 2007, 15:25:50 UTC 5 years ago

Try PC-BSD !

PC-BSD is FreeBSD with easy installation and PBI's. PBI's are applications-in-directories, just like the Mac OSX uses. A PC-BSD is simply FreeBSD plus other stuff, so its really FreeBSD.

Anonymous

March 31 2007, 19:33:18 UTC 5 years ago

Re: Try PC-BSD !

I use PC-BSD over a few months now. It's KDE on FreeBSD and installs as simple a complete noob could want. It even autoupdates the OS now.

It plays WMV files pretty well by default but has problems connecting to other PC-BSD's and Linux. It hooks up well via Samba to XP.

The license is very simple. You can close your source and sell the OS and restrict distribution or you can free it. They don't care. No lawsuits to get into there. I think it's OK to close your source, also Linux, and sell it only. There will always be plenty of free Linux around.

IBM writes, that FreeBSD is the OS Linux should have been.

In my mind as a desktop user, PC-BSD should race right by all free Linux. Commercial ones might have better driver and multimedia situations.







[info]bwelmers

5 years ago

Anonymous

5 years ago

[info]janisenih

5 years ago

[info]keishadyfo

4 years ago

Anonymous

March 31 2007, 16:01:22 UTC 5 years ago

Hahaha you are all n00bs

So linux is hard...stick to windows then, n00bs

Anonymous

April 1 2007, 02:42:27 UTC 5 years ago

Re: Hahaha you are all n00bs

I believe you just strengthened the author's point about ego being part of the problem. What are you...twelve?

[info]evildrgo

5 years ago

Anonymous

March 31 2007, 16:52:44 UTC 5 years ago

comments

Okay first of all despite your claim of using linux for years, most of your criticism while being made with the best intention, is based upon ignorance (literally, not as an insult).

(1) You don't centralize all software into one directory. Base software that shouldn't be touched by the user should be in a different place from accessories like firefox. And...

(2) Microsoft knows this as well. It doesn't put everything into Program Files like you think it does! Ever heard of the system32 directory?

(3) Back to linux, finding locations of apps is not confusing for two reasons--
(i) each distro carefully sticks to a specific system for where they
install apps to. So if you consider all distros at once,
it might look confusing, but considering any specific distro it's not.
(ii) the command "which" reveals locations of apps. For example "which firefox" on my system returns
/usr/bin/firefox.

(4) The unix fs hierarchy is not arbitrary, just do a google search and it
will be explained to you. This is the most important point, because I think that you would not have written this article had you done that first.

(5) System configuration files are not in "seemingly random places" they are in /etc. How is it that you've used linux for years and not known that? And then for *user specific* configs for individual apps, they are stored in the user's home folder. Person A should have their own .mozilla directory for example, it shouldn't be shared with Person B. This is just like above, it's about simply understanding the difference between the user and the system. User specific settings should be kept separate.

(6) Your experience with app upgrades is specific to gentoo's portage, that's unfair to equate gentoo's buggy package management to being a generalized problem with linux! On most distros upgrading is a cakewalk
automated process that doesn't destroy your personal settings.

(7) Clipboard-- finally something dead on! Your other comments were useless, but this is actually right. And you've even hinted at the bigger issue-- there is still not enough integration between qt and gtk apps. It keeps getting better though, it's an active area of work for everyone working on the free desktop.

Most of your complaints are supposed to be about linux, but are instead about the hierarchical file system, which is what all unix type operating systems use. If you simply read how it works, you will realize that it's wonderful, and doesn't need an overhaul. If you don't understand why the distinction should be made between the user and the system, I invite you to try using a system with multiple users instead of just one.

Anonymous

March 31 2007, 17:29:59 UTC 5 years ago

Re: comments

> For example "which firefox" on my system returns
> /usr/bin/firefox
So? Can it be put in /iwantfiefoxhere/firefox? Is it relocatable? Answering 'what for?' doesn't count. More like 'why not?' Why aren't apps relocatable? Until Linux can do this it will have no claim to the greatest desktop OS.

> The unix fs hierarchy is not arbitrary...
I disagree. It's completely arbitrary. Breaking a whole component into exploding spaghetti in the filesystem is arbitrary. My previous post mentions this: http://theosib.livejournal.com/1742.html?thread=12494#t12494

>If you simply read how it works, you will realize that it's wonderful, and doesn't need an overhaul.
I think he knows how it works, it's not wonderful and it does need an overhaul. Also, tell this to your Linux using Grandma or Wife.

> ...unfair to equate gentoo's buggy package management to being a generalized problem with linux
Why? Is gentoo a Linux or not? More to the point, why does Linux require a package manager?? This is the problem--some external entity trying to make an object out of the entire filesystem!

Linux needs work. Try using something other than Linux for a while.

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

5 years ago

Anonymous

March 31 2007, 17:25:22 UTC 5 years ago

ASCII config files all over the place ..

Personally I don't think the ASCII config files all over the place is that big a problem. Most modern Linux desktops have some kind of a GUI config/installer. If you really need to find a particular file there there is always locate, whereis, whatis, appropos.

[info]racquelufip

May 17 2007, 05:50:40 UTC 5 years ago

Re: ASCII config files all over the place ..

imho, ASCII config files all over the place is not a problem at all.

Just my 2 Cents worth.

Anonymous

March 31 2007, 17:54:21 UTC 5 years ago

As I understand it:

- If you change the directory model (FHS), a lot of stuff will BREAK. And Linux/UNIX old-timers (I am not one of them, I have been using Linux since 2005 only) wouldn't like it.

I expect to find system logs in /var/log, not in some other path.

- If you use the Mac OS X model (a single package for each app), you have to upgrade each application when a bugfix happens to a single library. I.e. you have to replace a10MB file just to upgrade a 100KB library.
- Your average "Joe User" rarely needs to go beyond his/her $HOME. I can't see a non-geek user messing with stuff in /etc.
- For me, it is much more useable to have libraries in /lib and /usr/lib, apps in /usr/{bin, share}, includes in /usr/include, system-level config files in /etc, than the "throw everything in the same folder" Windows approach.
- I like using ASCII text files for configuration. I have been bitten by buggy video drivers under Windows, and needed to reinstall because I couldn't get access to the registry. On X11, if my video driver fails, I just need to edit /etc/X11/xorg.conf as needed.

As for the clipboard question, I agree. I want to be able to copy an image from my image editor, and paste it into my OpenOffice document. I could do that in Windows 95 with OLE (as long as the apps involved supported it)!

Anonymous

March 31 2007, 18:17:16 UTC 5 years ago

> I expect to find system logs in /var/log, not in some other path.
What's the problem? Can't handle change already (you admit "I am not one of them (Linux/UNIX old-timers), I have been using Linux since 2005 only"). You're a perfect recruit to the Linux "things are perfect just like they were for Unix in 1977" attitude.

Grow up. Linux is far from perfect.

Anonymous

5 years ago

Anonymous

March 31 2007, 18:07:35 UTC 5 years ago

Text config files

I got stuck on the configuration file part and couldn't continue until I commented, so I apologize if this has been addressed.

As a former Windows user (and arguably a "power user"), I can testify that text-based config files are MUCH easier than editing the windows registry. I even worked in the IT business for a time and still do not understand the windows registry. So much of it is 9023x283e28391000000 and other such oddities, whereas Linux text files are in plain English. I've actually always considered those files to be one of the benefits of switching from Windows.

There were times when my something on my computer was broken, and even Microsoft support personnel couldn't help with the Windows registry. Trust me, that is something we do not want to emulate.

I also use a Mac at work and agree that it is easy if you don't want to do much. If, however, you want to customize something or really use your system for more complex tasks, it's a bear. It's like all or nothing. Either it's completely effortless or incredibly difficult. I think one of the benefits of desktops like KDE is that it has ease of use, but it also has sophisticated configureability and customization.

Anonymous

March 31 2007, 19:26:23 UTC 5 years ago

More important things have to be solved

The argument here devolves into one of "what do you want" rather than "what is best". I personally feel that the Apple way of doing things isn't much better because configuration files aren't stored with the application. If I want to migrate the application over to another machine I still have to use an assistant (if one exists) or have some other way of dealing with things. So from a user's perspective it's still far from optimal. Granted, all OSes I've tried have this problem, especially for apps on memory keys and such.

From a system administrator's perspective it makes no difference how the file system is organised unless they are developers. I can drag the app.app icon to the trash just as quickly as I can type "emerge -C app" and hit enter. What's more important is easy and managed system-wide updates of applications along with the OS.

Let's face it, Windows just doesn't do this well. Sure, you can argue that most apps check for updates on startup but then I have to start each app to check. OSX isn't much better off, I have to do pretty much the same thing. On most Unix-based systems I simply run an update-manager and it handles everything from my system libraries to applications. It even tells me what has changed and lets me limit things to security-related updates only. Rolling back an update is generally trivial news as well. The only thing that UNIX doesn't handle automatically is usually a kernel update. But those are pretty rare and require much attention anyhow.

We could go in circles for days arguing about things, but instead I would recommend we discuss the lower-level pros and cons of each system and try to come up with a POSIX-like standard for such things (even if it's watered-down or less than perfect). Simply arguing about the layout of the underlying file system is pretty pointless, especially since FUSE support in Linux makes it possible to view an existing filesystem any way YOU see fit, much like GoboLinux does.
Previous
← Ctrl← Alt
  • 1
  • 2
Next
Ctrl →Alt →
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…