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).