Slackware

Slackware is a Linux distribution created by Patrick Volkerding in 1993. Originally based on Softlanding Linux System (SLS), Slackware has been the basis for many other Linux distributions, most notably the first versions of SUSE Linux distributions, and is the oldest distribution that is still maintained.

Slackware aims for design stability and simplicity and to be the most "Unix-like" Linux distribution. It makes as few modifications as possible to software packages from upstream and tries not to anticipate use cases or preclude user decisions. In contrast to most modern Linux distributions, Slackware provides no graphical installation procedure and no automatic dependency resolution of software packages. It uses plain text files and only a small set of shell scripts for configuration and administration. Without further modification it boots into a command-line interface environment. Because of its many conservative and simplistic features, Slackware is often considered to be most suitable for advanced and technically inclined Linux users.

Slackware is available for the IA-32 and x86_64 architectures, with a port to the ARM architecture. While Slackware is mostly free and open-source software, it does not have a formal bug tracking facility or public code repository, with releases periodically announced by Volkerding. There is no formal membership procedure for developers and Volkerding is the primary contributor to releases.

Name
The name "Slackware" stems from the fact that the distribution started as a private side project with no intended commitment. To prevent it from being taken too seriously at first, Volkerding gave it a humorous name, which stuck even after Slackware became a serious project.

Slackware refers to the "pursuit of Slack", a tenet of the Church of the SubGenius, a parody religion. Certain aspects of Slackware graphics reflect this —the pipe that Tux is smoking, as influenced by the image of J. R. "Bob" Dobbs' head.

A humorous reference to the Church of the SubGenius can be found in many versions of the install.end text files, which indicate the end of a software series to the setup program. In recent versions, including Slackware release 14.1, the text is ROT13 obfuscated.

Birth
Slackware was originally derived from the Softlanding Linux System (SLS), the most popular of the original Linux distributions and the first to offer a comprehensive software collection that comprised more than just the kernel and basic utilities, including an X11 graphical interface, TCP/IP, UUCP networking, and GNU Emacs.

Patrick Volkerding started with SLS after needing a LISP interpreter for a school project at the then named Moorhead State University (MSU). He found CLISP was available for Linux and downloaded SLS to run it. A few weeks later, Volkerding was asked by his artificial intelligence professor at MSU to show him how to install Linux at home and on some of the computers at school. Volkerding had made notes describing fixes to issues he found after installing SLS and he and his professor went through and applied those changes to a new installation. However, this took almost as long as it took to just install SLS, so the professor asked if the install disks could be adjusted so the fixes could be applied during installation. This was the start of Slackware. Volkerding continued making improvements to SLS: fixing bugs, upgrading software, automatic installation of shared libraries and the kernel image, fixing file permissions, and more. In a short time, Volkerding had upgraded around half the packages beyond what SLS had available.

Volkerding had no intentions to provide his modified SLS version for the public. His friends at MSU urged him to put his SLS modifications onto an FTP server, but Volkerding assumed that "SLS would be putting out a new version that included these things soon enough", so he held off for a few weeks. During that time, many SLS users on the internet were asking SLS for a new release, so eventually Volkerding made a post titled "Anyone want an SLS-like 0.99pl11A system?", to which he received many positive responses. After a discussion with the local sysadmin at MSU, Volkerding obtained permission to upload Slackware to the university's FTP server. This first Slackware release, version 1.00, was distributed on July 17, 1993, at 00:16:36 (UTC), and was supplied as twenty-four 3½" floppy disk images. After the announcement was made, Volkerding watched as the flood of FTP connections continually crashed the server. Soon afterwards, Walnut Creek CDROM offered additional archive space on their FTP servers.

Development
The size of Slackware quickly increased with the addition of included software, and by version 2.1, released October 1994, it had more than tripled to comprise seventy-three 1.44M floppy disk images.

In 1999, Slackware saw its version jump from 4 to 7. Slackware version numbers were lagging behind other distributions, and this led many users to believe it was out of date even though the bundled software versions were similar. Volkerding made the decision to bump the version as a marketing effort to show that Slackware was as up-to-date as other Linux distributions, many of which had release numbers of 6 at the time. He chose 7, estimating that most other distributions would soon be at this release number.

In April 2004, Patrick Volkerding added X.Org Server packages into the testing/ directory of -current as a replacement for the XFree86 packages currently being used, with a request for comments on what the future of the X Window System in Slackware should be. A month later, he switched from XFree86 to X.Org Server after stating that the opinions were more than 4 to 1 in favor of using the X.org release as the default version of X. He stated the decision was primarily a technical one, as XFree86 was proving to cause compatibility problems. Slackware 10.0 was the first release with X.Org Server.

In March 2005, Patrick Volkerding announced the removal of the GNOME desktop environment in the development ChangeLog. He stated this had been under consideration for more than four years and that there were already projects that provided a more complete version of GNOME for Slackware than what Slackware itself provided. Volkerding stated future GNOME support would rely on the community. The community responded and as of October 2016, there are several active GNOME projects for Slackware. These include Cinnamon, Dlackware, Dropline GNOME, MATE, and SlackMATE. The removal was deemed significant by some in the Linux community due to the prevalence of GNOME in many distributions.

In May 2009, Patrick Volkerding announced the public (development) release of an official x86_64 variant, called Slackware64, maintained in parallel with the IA-32 distribution. Slackware64 is a pure 64-bit distribution in that it does not support running or compiling 32-bit programs, however, it was designed as "multilib-ready". Eric Hameleers, one of the core Slackware team members, maintains a multilib repository that contains the necessary packages to convert Slackware64 to multilib to enable running of 32-bit software. Hameleers started the 64-bit port as a diversion from the pain of recovering from surgery in September 2008. Volkerding tested the port in December 2008, and was impressed when he saw speed increases between 20 and 40 percent for some benchmarks compared to the 32-bit version. To minimize the extra effort of maintaining both versions in parallel, Slackware's build scripts, called SlackBuilds, were slowly transitioned to supporting either architecture, allowing for one set of sources for both versions. Slackware64 saw its first stable release with version 13.0.

Between the November 2013 release of 14.1 and June 2016, Slackware saw a 31-month gap between releases, marking the longest span in release history. During this time the development branch went without updates for 47 days. However, on April 21, 2015, Patrick Volkerding apologized on the ChangeLog for the absence of updates and stated that the development team used the time to get "some good work done." There were over 700 program changes listed on that ChangeLog entry, including many major library upgrades. In January 2016, Volkerding announced the reluctant addition of PulseAudio, primarily due to BlueZ dropping direct ALSA support in v5.x. while various other projects were in turn dropping support for BlueZ v4.x. Knowing some users would not be happy with the change, he stated that "Bug reports, complaints, and threats can go to me." These changes culminated in the release of Slackware 14.2 in June 2016.

Historical documentation
David Cantrell worked as a core member of the Slackware team between 1999-2001, and described that period on the Slackware ARM Vlog. Patrick Volkerding provided further information about the time period in two interviews.

Design philosophy
The design philosophy of Slackware is oriented toward simplicity, software purity, and a core design that emphasizes lack of change to upstream sources. Many design choices in Slackware can be seen as a heritage of the simplicity of traditional Unix systems and as examples of the KISS principle. In this context, "simple" refers to the simplicity in system design, rather than system usage. Thus, ease of use may vary between users: those lacking knowledge of command line interfaces and classic Unix tools may experience a steep learning curve using Slackware, whereas users with a Unix background may benefit from a less abstract system environment. In keeping with Slackware's design philosophy, and its spirit of purity, most software in Slackware uses the original configuration mechanisms supplied by the software's authors; however, for some administrative tasks, distribution-specific configuration tools are delivered.

Development model
There is no formal issue tracking system and no official procedure to become a code contributor or developer. The project does not maintain a public code repository. Bug reports and contributions, while being essential to the project, are managed in an informal way. All the final decisions about what is going to be included in a Slackware release strictly remain with Slackware's benevolent dictator for life, Patrick Volkerding.

The first versions of Slackware were developed by Patrick Volkerding alone. Beginning with version 4.0, the official Slackware announce files list David Cantrell and Logan Johnson as part of the "Slackware team". Later announce statements, up to release version 8.1, include Chris Lumens. Lumens, Johnson and Cantrell are also the authors of the first edition of "Slackware Linux Essentials", the official guide to Slackware Linux. The Slackware website mentions Chris Lumens and David Cantrell as being "Slackware Alumni", who "worked full-time on the Slackware project for several years." In his release notes for Slackware 10.0 and 10.1 Volkerding thanks Eric Hameleers for "his work on supporting USB, PCI, and Cardbus wireless cards". Starting with version 12.0 there is, for a second time, a team building around Volkerding. According to the release notes of 12.2, the development team consists of seven people. Future versions added people. Since version 13.0, the Slackware team seems to have core members. Eric Hameleers gives an insight into the core team with his essay on the "History of Slackware Development", written on October 3–4, 2009 (shortly after the release of version 13.0).

Management
Slackware's package management system, collectively known as pkgtools, can administer (pkgtool), install (installpkg), upgrade (upgradepkg), and remove (removepkg) packages from local sources. It can also uncompress (explodepkg) and create (makepkg) packages. The official tool to update Slackware over a network or the internet is slackpkg. It was originally developed by Piter Punk as an unofficial way to keep Slackware up-to-date. It was officially included in the main tree in Slackware 12.2, having been included in extras/ since Slackware 9.1. When a package is upgraded, it will install the new package over the old one and then remove any files that no longer exist in the new package. Once a package has been installed with slackpkg it can be managed with pkgtool or other package management commands. When running upgradepkg, it only confirms that the version numbers are different, thus allowing downgrading the package if desired.

Slackware packages are tarballs compressed using various methods. Starting with 13.0, most packages are compressed using xz (based on the LZMA compression algorithm), utilizing the .txz filename extension. Prior to 13.0, packages were compressed using gzip (based on the DEFLATE compression algorithm), using the .tgz extension. Support for bzip2 and lzip compression was also added, using the filename extensions .tbz and .tlz respectively, although these are not commonly used.

Packages contain all the files for that program, as well as additional metadata files used by the package manager. The package tarball contains the full directory structure of the files and is meant to be extracted in the system's root directory during installation. The additional metadata files, located under the special install/ directory within the tarball, usually include a slack-desc file, which is a specifically formatted text file that is read by the package manager to provide users with a description of the packaged software, as well as a doinst.sh file, which is a post-unpacking shell script allowing creation of symbolic links, preserving permissions on startup files, proper handling of new configuration files, and any other aspects of installation that can not be implemented via the package's directory structure. During the development of 15.0, Volkerding introduced support for a douninst.sh uninstall script that can be launched when removing or upgrading a package. This allows package maintainers to run commands when a package is uninstalled.

The package manager maintains a local database on the computer, stored in multiple folders. On 14.2 and older systems, the main database of installed packages was maintained in /var/log/, however, during the development of 15.0, Volkerding moved two of the directories to a dedicated location under /var/lib/pkgtools/ to prevent accidental deletion when clearing system logs. Each Slackware installation will contain a packages/ and scripts/ directory in the main database location. The former is where each package installed will have a corresponding install log file (based on the package name, version, arch, and build) that contains the package size, both compressed and uncompressed, the software description, and the full path of all files that were installed. If the package contained an optional doinst.sh post-installation script, the contents of that script will be added to a file in the scripts/ directory matching the filename of the corresponding package in the packages/ directory, allowing the administrator to view the post-installation script at a future point. When a package is removed or upgraded, the old install logs and scripts found under packages/ and scripts/ are moved to removed_packages/ and removed_scripts/, making it possible to review any previous packages and see when they were removed. These directories can be found in /var/log/ on 14.2 and earlier, but were moved to /var/log/pkgtools/ during the development of 15.0. On systems supporting the douninst.sh uninstall script, those scripts will be stored in the /var/lib/pkgtools/douninst.sh/ directory while the package is installed. Once removed, the douninst.sh script will be moved to /var/log/pkgtools/removed_uninstall_scripts/.

Dependency resolution
The package management system does not track or manage dependencies; however, when performing the recommended full install, all dependencies of the stock packages are met. For custom installations or 3rd-party packages, Slackware relies on the user to ensure that the system has all the supporting system libraries and programs required by the program. Since no official lists of dependencies for stock packages are provided, if users decide to install a custom installation or install 3rd-party software, they will need to work through any possible missing dependencies themselves. Since the package manager doesn't manage dependencies, it will install any and all packages, whether or not dependencies are met. A user may find out that dependencies are missing only when attempting to use the software.

While Slackware itself does not incorporate official tools to resolve dependencies, some unofficial, community-supported software tools do provide this function, similar to the way APT does for Debian-based distributions and yum does for Red Hat-based distributions. They include
 * slapt-get is a command line utility that functions in a similar way to APT. While slapt-get does provide a framework for dependency resolution, it does not provide dependency resolution for packages included within the Slackware distribution. However, several community package sources and Slackware based distributions take advantage of this functionality. Gslapt is a graphical interface to slapt-get.
 * Swaret is a package management tool featuring dependency resolution. It was originally included in Slackware version 9.1 as an optional package, but did not contain dependency resolution at that time. It was removed from the distribution with Slackware 10.0 and turned over to the community. It eventually added dependency resolution and roll-back functionality; however, as of May 2014, there are no active developers.
 * NetBSD's pkgsrc provides support for Slackware, among other Unix-like operating systems. pkgsrc provides dependency resolution for both binary and source packages.

Repositories
There are no official repositories for Slackware. The only official packages Slackware provides are available on the installation media. However, there are many third-party repositories for Slackware; some are standalone repositories and others are for distributions that are Slackware-based but retain package compatibility with Slackware. Many of these can be searched at once using pkgs.org, which is a Linux package search engine. However, mixing and matching dependencies from multiple repositories can lead to two or more packages that require different versions of the same dependency, which is a form of dependency hell. Slackware itself won't provide any dependency resolution for these packages, however some projects will provide a list of dependencies that are not included with Slackware with the files for the package, commonly with a .dep extension.

Due to the possibility of dependency issues, many users choose to compile their own programs using community-provided SlackBuilds. SlackBuilds are shell scripts that will create an installable Slackware package from a provided software tarball. Since SlackBuilds are scripts, they aren't limited to just compiling a program's source; they can also be used to repackage pre-compiled binaries provided by projects or other distributions' repositories into proper Slackware packages. SlackBuilds that compile sources have several advantages over pre-built packages: since they build from the original author's source code, the user does not have to trust a third-party packager; furthermore the local compilation process allows for machine-specific optimization. In comparison to manual compilation and installation of software, SlackBuilds provide cleaner integration to the system by utilizing Slackware's package manager. Some SlackBuilds will come with an additional file with metadata that allows automated tools to download the source, verify the source is not corrupt, and calculate additional dependencies that are not part of Slackware. Some repositories will include both SlackBuilds and the resulting Slackware packages, allowing users to either build their own or install a pre-built package.

The only officially endorsed SlackBuilds repository is SlackBuilds.org, commonly referred to as SBo. This is a community-supported project offering SlackBuilds for building software not included with Slackware. Users are able to submit new SlackBuilds for software to the site and, once approved, they become the "package maintainer". They are then responsible for providing updates to the SlackBuild, either to fix issues or to build newer versions provided by upstream. To ensure all programs can be compiled and used, any required dependencies of the software not included with Slackware are required to be documented and be available on the site. All submissions are tested by the site's administrators before being added to the repository. The administrators intend for the build process to be nearly identical to the way Slackware's official packages are built, mainly to ensure Volkerding was "sympathetic of our cause". This allows SlackBuilds that Volkerding deems worthy to be pulled into regular Slackware with minimal changes to the script. It also prevent users from suggesting Volkerding to change his scripts to match SBo's. SBo provides templates for SlackBuilds and the additional metadata files and they encourage package maintainers to not deviate unless necessary.

Two Slackware team members, Eric Hameleers and Robby Workman each have their own repository of pre-compiled packages along with the SlackBuilds and source files used to create the packages. While most packages are just additional software not included in Slackware that they felt was worth their time to maintain, some packages are used as a testbed for future upgrades to Slackware, most notably, Hameleers provides "Ktown" packages for newer versions of KDE. He also maintains Slackware's "multilib" repository, enabling Slackware64 to run and compile 32-bit packages.

Releases
Slackware's release policy follows a feature and stability based release cycle, in contrast to the time-bound (e.g., Ubuntu) or rolling release (e.g., Gentoo Linux) schemes of other Linux distributions. This means there is no set time on when to expect a release. Volkerding will release the next version after he feels a suitable number of changes from the previous version have been made and those changes lead to a stable environment. As stated by Patrick Volkerding, "It's usually our policy not to speculate on release dates, since that's what it is — pure speculation. It's not always possible to know how long it will take to make the upgrades needed and tie up all the related loose ends. As things are built for the upcoming release, they'll be uploaded into the -current tree."

Throughout Slackware's history, they generally tried to deliver up-to-date software on at least an annual basis. From its inception until 2014, Slackware had at least one release per year. Release activity peaked in 1994, 1995, 1997 and 1999, with three releases each year. Starting with version 7.1 (June 22, 2000) the release progression became more stable and typically occurred once per year. After that point, the only years with two releases were 2003, 2005 and 2008. However, since the release of Slackware 14.1 in 2013, new releases have slowed down drastically. There was a more than 2-year gap between 14.1 and 14.2 and over a 5 year gap to 15.0. Upon the release of 15.0, Volkerding stated that Slackware 15.1 will hopefully have a far shorter development cycle since the "tricky parts" were resolved during the development of 15.0.

Slackware's latest 32-bit x86 and 64-bit x86_64 stable releases are at version 15.0 (released on February 2, 2022), which include support for Linux 5.15.19.

Volkerding also maintains a testing/developmental version of Slackware called "-current" that can be used for a more bleeding edge configuration. This version will eventually become the next stable release, at which point Volkerding will start a new -current to start developing for the next release of Slackware. While this version is generally known to be stable, it is possible for things to break, so -current tends to not be recommended for production systems.

Support
Currently, Slackware has no officially stated support term policy. However, on June 14, 2012, notices appeared in the changelogs for versions 8.1, 9.0, 9.1, 10.0, 10.1, 10.2, 11.0, and 12.0 stating that, effective August 1, 2012, security patches would no longer be provided for these versions. The oldest release, version 8.1, was released on June 18, 2002 and had over 10 years of support before reaching EOL. Later, on August 30, 2013, announcements were made on the changelogs of 12.1 and 12.2 stating their EOL on December 9, 2013. It was stated in the changelog entries that they had at least 5 years of support. On April 6, 2018, versions of 13.0, 13.1 and 13.37 were declared reaching their EOL on July 5, 2018. It was stated in the changelog entries that they had at least 7 years of support (13.0 had been supported almost 9 years). On October 9, 2023 the changelog for 14.2 stated that 14.0, 14.1 and 14.2 will be EOL effective January 1, 2024.

While there have been no official announcements for versions prior to 8.1, they are no longer maintained and are effectively EOL.

Hardware architectures
Historically, Slackware concentrated solely on the IA-32 architecture and releases were available as 32-bit only. However, starting with Slackware 13.0, a 64-bit x86_64 variant is available and officially supported in symmetrical development with the 32-bit platform. Prior to the release of Slackware64 users wanting 64-bit were required to use unofficial ports such as slamd64.

Slackware is also available for the IBM S/390 architecture in the form of Slack/390 and for the ARM architecture under Slackware ARM (originally known as 'ARMedslack'). Both ports have been declared "official" by Patrick Volkerding. However, the S/390 port is still at version 10.0 for the stable version and 11.0 for the testing/developmental version, and has had no updates since 2009. Also, on May 7, 2016, the developer of Slackware ARM announced 14.1 will be EOL on September 1, 2016 and development of -current will cease with the release of 14.2, however support for 14.2 will be maintained for the foreseeable future. The EOL announcement for 14.1 was added to the changelog on June 25, 2016, and the EOL announcement for 14.2 was added to the changelog on December 21, 2022.

In July 2016, the developer of Slackware ARM announced that the development and build tools had been enhanced to reduce the manual effort involved in maintaining the ARM port, and proceeded to announce that a 32-bit hardware floating port was in development. The port was released in August 2016 in "current" form.

On 28th December 2020 work began on porting Slackware to the 64-bit ARM architecture (known as 'AArch64'), with the initial Hardware Model targets being the PINE64's RockPro64 and Pinebook Pro. It was functionally complete by May 2021, and has many improvements over the original design and implementation of the ARM port - particularly in regards to the management and enablement of new Hardware Models by the Slackware ARM community. Additionally, the boot and installation processes were improved significantly - making the installation process far easier and more streamlined.

On Mar 29th 2022 Slackware AArch64 was publicly released in -current (development) form with support for the RockPro64, Pinebook Pro and Raspberry Pi 3 & 4, with online installation documentation and video installation guides. Also the unofficial slarm64 project has a port for AArch64, and an additional port for riscv64 architecture.

In March 2022 official development of the ARM 32bit port of Slackware ceased, with future development concentrated solely on the AArch64/ARM64 port. This was because the 32bit hardware was unable to keep pace with the development of Slackware and was inhibiting development, and the limitations of the hardware became a blocker to the adoption of the latest technologies. Additionally since most of the other mainstream distributions ceased support for 32bit ARM, some of the applications failed to build and were no longer supportable. There is however the unofficial Slackware port BonSlack that provide both soft (ARMv5) and hard float (ARMv7) ports for 32bit ARM, with development and updates (from 14.2) aligned with official Slackware. This project also provides ports for Aarch64 (ARM64), Alpha, HPPA (PA-RISC 1.1), LoongArch (64 bit), MIPS (32/64bit), OpenRISC, PowerPC (32/64bit), RISC-V (64bit), S/390x, SH-4, SPARC (32/64bit), and x86 (32bit with 64bit time_t) architectures.

On Dec 21 2022, Slackware ARM 14.2 had its EOL (End of Life) declared as 1st March 2023.

Slackintosh is a port of Slackware Linux for the Macintosh New World ROM PowerPC architecture, used by Apple's Power Macintosh, PowerBook, iMac, iBook, and Xserve lines from 1994 until 2006. The last version of Slackintosh was 12.1, released on Jun 7, 2008. Slackintosh's website is still active and version 12.1 is available for download for those who have older PowerPC Macintosh computers. The project developers announced in February 2012 that development was frozen and 12.1 would be able to receive security patches for one month. The next month, it was announced that the stable release is frozen and won't receive any further updates unless someone else decides to take over. This never happened and Volkerding officially declared the project dead in July 2021.

Distribution
Slackware 14.2 CD sets, single DVDs, and merchandise were available from the third-party-controlled Slackware store, but due to underpayment, Patrick Volkerding, "told them to take it down or I'd suspend the DNS for the store".

Slackware ISO images (2.6 GB) for installation can be downloaded for free at the Slackware website via BitTorrent, FTP mirrors, and HTTP mirrors.

Slackware port for IBM S/390 (EOL: 2009)) can be downloaded, and installs from a DOS Partition or from floppy disk.

Slackware port for ARM architecture can be downloaded, and installed via a network, using Das U-Boot and a TFTP boot server or from a mini-root filesystem.

Slackware ARM can also be installed on a PC running QEMU using the same technique.

Slackware AArch64 (ARM64) is installed directly from SD card images in a similar fashion to installing Slackware x86 off a DVD.