                         Herminux README
                         ---------------


 Herminux was planned to be a very lightweight linux distribution with
the aim to still be suitable for everyday work, even on old machines.
(File-handling, editing, multimedia, internet-browsing, mailing, etc.)
 I started to create this distribution in late 2014 and has been using
it since the beginning of 2015, adding more and more to it occasionally.
 But life comes into play and I don't have the time to finish it, but I
still share it with the public in the hope others may benefit from this
material or the accumulated information.

 I didn't upload binary distributions for Herminux and don't plan so.
(The i486 version of BASE system with commamdline tools takes 18MB when 
installed, the GUI with fonts, wallpapers, screensavers, icons and 
mousecursor-themes takes 31MB, so the whole system with media but 
without GUI applications (only rxvt) takes 49MB. Compressed into .tar.xz
it only takes 24MB.)
 If you want to compile Herminux, you need a host system with a build-
toolchain (make, gcc, etc.) and the needed source files in a folder-tree
seen in file 'Herminux-sources.ls'. (The 'Herminux-sources' folder
should be placed in the same directory as 'Herminux' folder. You need
to acquire the exact versions of the sources manually, I don't plan to
upload the 700MB Herminux-sources folder anywhere and don't have links.)
The compilation can be made automatically by the 'Makefile' 
typing 'make' inside 'Herminux' folder. The intermediate and the result
folders will be generated in the same folder as the 'Herminux' folder.


 These are the key ideas I wanted to realize, this is how I'd like a
 Linux distribution to work:

 -Avoid overcomplication and big size and slowness if at all possible,
  leave only the most important things in, or at least be scalable,
  so the user has the option to build a small system or a full featured.

 -Package management should be as simple as handling tar.xz files.
  That can be achieved by defining a concrete BASE system with libraries
  which are provided, and include the dependencies which are not present
  in the well defined BASE system, inside the package files.

 -Applications should be compiled into binary packages with only the
  options that make sense on the target system. In the 'buildcfg' folder
  you can see a lot of files having the ./configure options that worked.
  Many linux distributions have packages compiled with a simple 
  ./configure without any fine-tuning, and their compiled size suffers.

 -Commandline applications (e.g. tar, xz, gzip, xrandr) can sometimes be
  too advanced with too many options that users don't use most of the
  time, and the things they need are often hard to find between the 
  myriads of options what the tool offers.
  I made some scripts which make the usual tasks easier, thay can be  
  found in 'runtimecfg/base/bin' folder (e.g. 'pack','depack','mnt').

 -One of the hardest thing for me is to find the good applications that
  are well-established, preferably bug-free, and are reasonable in size.
  My pain is that though linux is a good system in the low levels and
  commandline, there are a lot of useless applications and the ones that
  are featureful are often huge to handle. I think only the most usable 
  software packages should be included in a package repository, or at 
  least they should be indicated to the users not to confuse them which
  app to download and install... That's a lot of work of course to
  find the best applications, and I doubt there are many good ones...
   I downloaded and tried a lot of linux applications, you can find info
  about them in 'xtra-info.txt', though not in a well structured manner.
  (The same goes for the wallpapers/cursorthemes/iconthemes/fonts. I
   made some careful selections and they are in 'media' folder.)

 -The same distribution should be available for many platforms in the
  exact same form, so confusion can be avoided. For example some Linux
  distributions are quite different on Raspberry PI than on an Intel PC.
  Herminux on the other hand uses the same files and folders to compile
  the system with one Makefile, where the target may be set easily.


 I started from scratch, and examined what the bare essentials are that
a Linux system needs to operate. In a nutshell: bootloader (e.g. GRUB),
system folders, kernel, libc, busybox and inittab. These are enough to 
start Linux on a machine. Some other essential configs/scripts are advi-
sed beside /etc/inittab, e.g. /etc/profile, /etc/passwd, /etc/group..
 Well, i cheated quite a bit. Normally LFS and other linux distributions
are created with a 'bootstrap' what means the GCC toolchain and other
essential build tools are compiled first in a temporary chroot system.
It seemed too complicated and tedious to me, and I collected the build-
tools from Arch Linux and used Arch Linux as a host-system to compile
Herminux until it was ready enough to be compile itself... 
 I won't go more details here, if anyone is interested, the process of
building a Linux system from scratch can be seen in the manually crafted
readable Makefile, and also a lot of information about the system and
applications to consider can be seen in the textfile 'xtra-info.txt'.
(Or if you prefer the cheatless way, check Linux From Scratch homepage.)

Hardware-platform porting results:
I could run Herminux on Raspberry PI model A too, but the problem with
that machine is the frequent corruption of the SD-card. 
I couldn't get a commandline/shell on Android phone, only stdio worked.
The intel 32bit and 64bit versions all worked on various machines.

GUI-wise I made a very small selection of X11 libraries, which is really
needed to run a GUI. I didn't like the huge driver-library for EGL,
so I decided to have only framebuffer and modesetting (KMS) compiled for
the X. (Idea of using Weston/Wayland was abandoned due to its reliance
of graphic acceleration and big drivers. Not OK for small linux-distro.)
Modesetting is reasonable in size and allows changing resolutions,
while framebuffer is there as a fallback (e.g. for Raspberry PI)...
JWM window manager was the best I could use, it's small, simple but 
powerful and has a taskbar/panel, but it has no official GUI-config tool
and new versions have a traybutton click/release issue on my machines.
Still it is the best window manager in small size IMO.

 In the end I came to the conclusion that unless many things are recoded
there are no perfect small Linux distributions present. The work to sup-
port many devices is excellent, the kernel is a great work, but there
is no other way to have a working system for everyday use apart from
huge and slow GTK/GNOME applications with lots of dependencies. 
(I mean 'slow' for older but living hardware platforms like EEEPC-701.)
There are some good QT/FLTK/Fox toolkit applications, but most of the 
usable applications are GTK. LXDE (Lubuntu/SliTaz) is the current way to
go I guess, no other alternatives worth it in my opinion as desktops. 
 I started to code a very small GUI-toolkit (hgui) with no dependencies
other than X11/Xlib, so at least configuration and small application 
GUIs could be made faster and smaller even with static linking. That
way the users could have a 'desktop environment' within a really small
size and wouldn't have to rely on GTK (like with LXDE) if they don't 
want to. That would add to scalability for sure, but this might never 
happen unless someone picks up the idea and realizes it...

Maybe TinyCore will have a fresh small desktop-environment...
Maybe Puppy Linux or SliTaz is a good compromise between size and
features... (If only their settings were more comprehensive...)
Maybe Lubuntu is the best linux distribution. (But obviously not tiny.)
Maybe a computers should still have software tied to specific hardware,
and guarantee that all users have the same user experience...


Hermit (Mihaly Horvath)
Year 2016
http://hermit.sidrip.com
