mirror of git://
Log | Files | Refs (7062B)

      1 Stuff that sucks
      2 ================
      3 See the [philosophy](// page about what
      4 applies to this page.
      6 Bigger topics that suck:
      7 [systemd](//, [the
      8 web](//
     10 Libraries
     11 ---------
     12 These libraries are broken/considered harmful and should not be used if it's
     13 possible to avoid them. If you use them, consider looking for alternatives.
     15 * [glib][1] - implements C++ STL on top of C (because C++ sucks so much, let's
     16   reinvent it!), adding lots of useless data types for
     17   ["portability" and "readability" reasons][2].
     18   even worse, it is not possible to write robust applications using glib,
     19   since it [aborts in out-of-memory situations][8].
     20   glib usage is required to write gtk+ and gnome applications, but is also used
     21   when common functionality is needed (e.g. hashlists, base64 decoder, etc).
     22   it is not suited at all for static linking due to its huge size and the
     23   authors explicitly state that ["static linking is not supported"][19].
     25   Alternatives: [libmowgli][9], [libulz][10]
     27 * [GMP][3] - GNU's bignum/arbitrary precision library. Quite bloated, slow and
     28   [calls abort() on failed malloc][4]
     30   Alternatives: [libtommath][5], [TomsFastMath][6], [imath][7], [libzahl][11] (WIP), [hebimath][12] (WIP)
     33 [1]:
     34 [2]: (glib Basic Types)
     35 [3]: (The GNU Multiple Precision Arithmetic Library)
     36 [4]: "GMP calls abort() on failed malloc()"
     37 [5]:
     38 [6]:
     39 [7]:
     40 [8]:
     41 [9]:
     42 [10]:
     43 [11]: //
     44 [12]:
     45 [19]:
     47 Build Systems
     48 -------------
     50 * [cmake][13] (written in C++) - so huge and bloated, compilation takes longer
     51   than compiling GCC (!).
     52   It's not even possible to create freestanding Makefiles, since the generated
     53   Makefiles call back into the cmake binary itself.
     54   Usage of cmake requires learning a new custom scripting language with very
     55   limited expressiveness. Its major selling point is the existence of a
     56   clicky-click GUI for windows users.
     58 * [waf][14] and [scons][15] (both written in Python) - waf code is dropped
     59   into the compilee's build tree, so it does not benefit from updated versions
     60   and bugfixes.
     62 As these build systems are often used to compile C programs, one has to set up a
     63 C++ compiler or Python interpreter respectively just in order to be able to build
     64 some C code.
     66 Alternatives: [mk][16], [make][17]
     68 [13]:
     69 [14]:
     70 [15]:
     71 [16]:
     72 [17]:
     74 Version Control Systems
     75 -----------------------
     76 * [subversion][18] (Teaches developers to think of version control in a harmful
     77   and terrible way, centralized, ugly code, conceptionally broken in a lot of
     78   terms. "Centralized" is said to be one of the main benefits for "enterprise"
     79   applications, however, there is no benefit at all compared to decentralized
     80   version control systems like git. There is no copy-on-write, branching
     81   essentially will create a 1:1 copy of the full tree you have under version
     82   control, making feature-branches and temporary changes to your code a painful
     83   mess. It is slow, encourages people to come up with weird workarounds just to
     84   get their work done, and the only thing enterprisey about it is that it just
     85   sucks.
     87 [18]:
     89 Programs
     90 --------
     91 There are many broken X programs. Go bug the developers of these broken
     92 programs to fix them. Here are some of the main causes of this brokenness:
     94 * The program **assumes a specific window management model**, e.g.
     95   assumes you are using a WIMP-window manager like those
     96   found in KDE or Gnome. This assumption breaks the
     97   [ICCCM conventions][icccm].
     98 * The application uses a **fixed size** - this limitation does not fit
     99   into the world of tiling window managers very well, and can also be
    100   seen as breaking the ICCCM conventions, because a fixed sized window
    101   assumes a specific window management model as well (though the ICCCM
    102   does not forbid fixed-size windows). In any case, the ICCCM requests
    103   that clients accept any size the window manager proposes to them.
    104 * The program is based on strange **non-standard window manager
    105   hints** that only work properly with a window manager supporting these
    106   extensions - this simply breaks the ICCCM as well. E.g. trash icon
    107   programs.
    108 * The program does not conform to ICCCM due to some **missing or
    109   improperly set hints**.
    111 The following programs are broken (see [rocking stuff](/rocks) for saner alternatives):
    113 * [Firefox]( (doesn't set the TRANSIENT\_FOR
    114   hint correctly on its download dialog)
    115 * mplayer with GUI (assumes special window management model. It works without the GUI)
    116 * xine (assumes fixed size, doesn't set TRANSIENT\_FOR hint properly)
    118 If you still need some program which expects a floating WM, use it in
    119 floating mode.
    121 Documentation
    122 -------------
    123 Somewhen GNU tried to make the world a bit more miserable by inventing
    124 [texinfo][texinfo]. The result is that in 2016 man pages are still used and
    125 the documentation of GNU tools requires you to run `info $application`. The
    126 info browser is awkward and unintuitive and the reason why noone gets further
    127 than finding 'q' to quit it.
    129 Look at GNU tools how to not handle documentation.
    131 Talking about the suck in enforced HTML documentation, which forces you to open
    132 up a 1 Gb of RAM wasting web browser, just to see some eye-candy, which could
    133 have been described in the source with some easy way to jump to that line in
    134 the source code, is not worth the time.
    136 The suckless way is to have a short usage and a descriptive manpage. The
    137 complete details are in the source.
    139 C Compilers
    140 ---------
    141 * [GCC][gcc] is the virus which has spread into nearly every Linux
    142   distribution and has added its language extensions to be not easily
    143   replacable. As of 2016 it is now written in C++ and so complete suck. Why
    144   can't a compiler just be a simple binary doing its work instead of adding
    145   path dependencies deep into the system?
    146 * [Clang][clang] is written in C++. If you don't believe that it sucks, try to
    147   build clang by hand.
    149 See also
    150 --------
    152 The [list of harmful software]( at [](
    154 [aterm-ml-post]: //
    155 [st]:     //
    156 [uuterm]:
    157 [icccm]:
    158 [texinfo]:
    159 [gcc]:
    160 [clang]: