URI: 
       index.md - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       index.md (6336B)
       ---
            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),
            7 [the 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   BSD [queue.h](https://man.openbsd.org/queue)/[tree.h](https://man.openbsd.org/tree) macros.
           29 
           30 * [GMP](http://gmplib.org/) - GNU's bignum/arbitrary precision
           31   library. Quite bloated, slow and [calls abort() on failed
           32   malloc](https://gmplib.org/repo/gmp/file/tip/memory.c#l105)
           33 
           34   Alternatives: [libtommath](http://www.libtom.net/LibTomMath/),
           35   [TomsFastMath](http://www.libtom.net/TomsFastMath/),
           36   [imath](https://github.com/creachadair/imath),
           37   [libzahl](//libs.suckless.org/libzahl) (WIP),
           38   [hebimath](https://github.com/suiginsoft/hebimath) (WIP)
           39 
           40 Build Systems
           41 -------------
           42 * [cmake](http://www.cmake.org/) (written in C++) - so huge and bloated,
           43   compilation takes longer than compiling GCC (!). It's not even possible
           44   to create freestanding Makefiles, since the generated Makefiles call
           45   back into the cmake binary itself. Usage of cmake requires learning a
           46   new custom scripting language with very limited expressiveness. Its
           47   major selling point is the existence of a clicky-click GUI for windows
           48   users.
           49 * [waf](https://code.google.com/p/waf/) and
           50   [scons](http://www.scons.org/) (both written in Python) - waf code is
           51   dropped into the compilee's build tree, so it does not benefit from
           52   updated versions and bugfixes.
           53 
           54 As these build systems are often used to compile C programs, one has to
           55 set up a C++ compiler or Python interpreter respectively just in order
           56 to be able to build some C code.
           57 
           58 Alternatives:
           59 [make](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html),
           60 [mk](http://doc.cat-v.org/plan_9/4th_edition/papers/mk)
           61 
           62 Version Control Systems
           63 -----------------------
           64 * [subversion](https://subversion.apache.org/) - Teaches developers to
           65   think of version control in a harmful and terrible way, centralized,
           66   ugly code, conceptionally broken in a lot of terms. "Centralized" is
           67   said to be one of the main benefits for "enterprise" applications,
           68   however, there is no benefit at all compared to decentralized version
           69   control systems like git. There is no copy-on-write, branching
           70   essentially will create a 1:1 copy of the full tree you have under
           71   version control, making feature-branches and temporary changes to your
           72   code a painful mess. It is slow, encourages people to come up with weird
           73   workarounds just to get their work done, and the only thing enterprisey
           74   about it is that it just sucks.
           75 
           76 Programs
           77 --------
           78 There are many broken X programs. Go bug the developers of these
           79 broken programs to fix them. Here are some of the main causes of this
           80 brokenness:
           81 
           82 * The program **assumes a specific window management model**,
           83   e.g. assumes you are using a WIMP-window manager like those
           84   found in KDE or Gnome. This assumption breaks the [ICCCM
           85   conventions](http://tronche.com/gui/x/icccm/).
           86 * The application uses a **fixed size** - this limitation does not fit
           87   into the world of tiling window managers very well, and can also be seen
           88   as breaking the ICCCM conventions, because a fixed sized window assumes
           89   a specific window management model as well (though the ICCCM does not
           90   forbid fixed-size windows). In any case, the ICCCM requests that clients
           91   accept any size the window manager proposes to them.
           92 * The program is based on strange **non-standard window manager
           93   hints** that only work properly with a window manager supporting these
           94   extensions - this simply breaks the ICCCM as well. E.g. trash icon
           95   programs.
           96 * The program does not conform to ICCCM due to some **missing or
           97   improperly set hints**.
           98 
           99 If you still need some program which expects a floating WM, use it in
          100 floating mode.
          101 
          102 Documentation
          103 -------------
          104 Somewhen GNU tried to make the world a bit more miserable by inventing
          105 [texinfo](https://www.gnu.org/software/texinfo/). The result is that
          106 in 2019 man pages are still used and the documentation of GNU tools
          107 requires you to run `info $application`. The info browser is awkward and
          108 unintuitive and the reason why no one gets further than finding 'q' to
          109 quit it.
          110 
          111 Look at GNU tools how to not handle documentation.
          112 
          113 Talking about the suck in enforced HTML documentation, which forces
          114 you to open up a 1 Gb of RAM wasting web browser, just to see some
          115 eye-candy, which could have been described in the source with some easy
          116 way to jump to that line in the source code, is not worth the time.
          117 
          118 The suckless way is to have a short usage and a descriptive manpage. The
          119 complete details are in the source.
          120 
          121 Alternatives: roff, [mdoc](https://mandoc.bsd.lv/).
          122 
          123 C Compilers
          124 -----------
          125 * [GCC](http://gcc.gnu.org/): as of 2016 it is now written in C++ and so
          126   complete suck. Why can't a compiler just be a simple binary doing its work
          127   instead of adding path dependencies deep into the system?
          128 * [Clang](http://clang.llvm.org/) is written in C++. If you don't
          129   believe that it sucks, try to build clang by hand.
          130 
          131 Alternatives: see the Compilers section of the [/rocks/](../rocks) page.
          132 
          133 See also
          134 --------
          135 The [list of harmful software](http://harmful.cat-v.org/software/) at
          136 [cat-v.org](http://cat-v.org).