sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

index.md (6251B)


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