Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC] Replace assert with meta.broken #36229

Closed
7c6f434c opened this issue Mar 2, 2018 · 31 comments
Closed

[RFC] Replace assert with meta.broken #36229

7c6f434c opened this issue Mar 2, 2018 · 31 comments
Labels
0.kind: enhancement 2.status: stale https://github.com/NixOS/nixpkgs/blob/master/.github/STALE-BOT.md 2.status: work-in-progress 6.topic: portability General portability concerns, not specific to cross-compilation or a specific platform 9.needs: community feedback 10.rebuild-darwin: 0 10.rebuild-linux: 0 11.by: nixpkgs-member

Comments

@7c6f434c
Copy link
Member

7c6f434c commented Mar 2, 2018

Issue description

A lot of Nixpkgs packages currently use assert. Most of the uses of assert had been introduced before meta.broken has been implemented. Using meta.broken with an expression condition has benefits, for example, it can be queried via meta.available and catching assertions requires builtins.tryEval, and it is always better not to add more uses of tryEval. See also #36226. Apparently enthusiastically supported by @Ericson2314

Tracking

My model of assertions: an assertion happens in a .nix file inside pkgs/ in a line not starting with a # in the beginning of the line or after one of (){}, before end of line (with condition on the next line) or one of (){}.

Sanity check:

find -name '*.nix' |
  xargs grep -E '^(|[ (){}]|[^#].*[ ()])assert(|[() {}].*)$' -L   |
  xargs grep '\<assert\>' |
  grep -v '"assert' | grep -v '-assert' | grep -v 'assert-'

(files without assertions as defined above that still have assert as a alphanumeric string as a grep word have assert either as a part of a dash-separated name, or inside quotes)

stdenv is a separate thing, the uses of assert — like in lib, which is outside pkgs — do not have a convenient meta.broken around.

Re: asserts for licenses: should there be lib.licenses.unsatisfied, like unfree but without a permanent override available (I guess $NIXPKGS_ALLOW_UNSATISFIED_LICENSEis enough for all debugging purposes)? The motivation is the same as with things that go tometa.broken: inspection of name/meta`.

Progress countdown:

find -name '*.nix' |
   xargs grep -E '^(|[ (){}]|[^#].*[ ()])assert(|[() {}].*)$' -l |
   grep -v '^[.]/stdenv/' | wc -l

→ 528

List of files:

./misc/drivers/hplip/default.nix
./misc/drivers/hplip/3.16.11.nix
./misc/drivers/gutenprint/bin.nix
./misc/ghostscript/default.nix
./misc/vscode-extensions/vscode-utils.nix
./misc/vscode-extensions/python/default.nix
./misc/vscode-extensions/cpptools/default.nix
./misc/gnash/default.nix
./misc/vim-plugins/vim-utils.nix
./misc/emulators/dolphin-emu/master.nix
./misc/emulators/pcsx2/default.nix
./misc/emulators/retroarch/kodi-advanced-launchers.nix
./misc/emulators/wine/staging.nix
./misc/emulators/wine/base.nix
./misc/emulators/ppsspp/default.nix
./misc/foldingathome/default.nix
./tools/typesetting/htmldoc/default.nix
./tools/typesetting/asciidoc/default.nix
./tools/typesetting/tex/nix/default.nix
./tools/typesetting/tex/dblatex/default.nix
./tools/networking/i2pd/default.nix
./tools/networking/miniupnpd/default.nix
./tools/networking/libreswan/default.nix
./tools/networking/haproxy/default.nix
./tools/networking/curl/default.nix
./tools/networking/openssh/default.nix
./tools/networking/p2p/amule/default.nix
./tools/networking/filegive/default.nix
./tools/networking/mtr/default.nix
./tools/networking/logmein-hamachi/default.nix
./tools/networking/ssmtp/default.nix
./tools/networking/openvpn/default.nix
./tools/networking/openconnect/default.nix
./tools/networking/chrony/default.nix
./tools/networking/ntp/default.nix
./tools/networking/netrw/default.nix
./tools/archivers/zip/default.nix
./tools/misc/trash-cli/default.nix
./tools/misc/hdf5/default.nix
./tools/misc/hdf5/1_8.nix
./tools/misc/remind/default.nix
./tools/misc/grub/2.0x.nix
./tools/misc/pk2cmd/default.nix
./tools/misc/megacli/default.nix
./tools/misc/coreutils/default.nix
./tools/misc/brltty/default.nix
./tools/filesystems/yandex-disk/default.nix
./tools/filesystems/squashfs/default.nix
./tools/filesystems/nixpart/0.4/cryptsetup.nix
./tools/filesystems/nixpart/0.4/blivet.nix
./tools/filesystems/ceph/generic.nix
./tools/backup/bareos/default.nix
./tools/backup/bup/default.nix
./tools/video/rtmpdump/default.nix
./tools/audio/beets/default.nix
./tools/audio/aucdtect/default.nix
./tools/inputmethods/ibus/default.nix
./tools/inputmethods/uim/default.nix
./tools/security/pass/default.nix
./tools/security/nmap/default.nix
./tools/security/enpass/default.nix
./tools/security/gnupg/20.nix
./tools/security/gnupg/22.nix
./tools/package-management/disnix/dysnomia/default.nix
./tools/package-management/checkinstall/default.nix
./tools/X11/xdg-utils/default.nix
./tools/X11/setroot/default.nix
./tools/graphics/gnuplot/default.nix
./tools/graphics/graphviz/base.nix
./tools/text/gawk/default.nix
./tools/text/xml/xpf/default.nix
./tools/compression/xdelta/default.nix
./tools/compression/xdelta/unstable.nix
./tools/system/storebrowse/default.nix
./shells/bash/4.4.nix
./data/fonts/iosevka/default.nix
./build-support/vm/default.nix
./build-support/trivial-builders.nix
./build-support/fetchipfs/default.nix
./build-support/replace-dependency.nix
./build-support/bintools-wrapper/default.nix
./build-support/fetchmavenartifact/default.nix
./build-support/fetchgit/default.nix
./build-support/closure-info.nix
./build-support/dotnetenv/build-solution.nix
./build-support/gcc-wrapper-old/default.nix
./build-support/fetchurl/default.nix
./build-support/fetchrepoproject/default.nix
./build-support/fetchdocker/generic-fetcher.nix
./build-support/fetchdocker/default.nix
./build-support/rust/default.nix
./build-support/ocaml/default.nix
./build-support/cc-wrapper/default.nix
./servers/apcupsd/default.nix
./servers/samba/3.x.nix
./servers/mpd/default.nix
./servers/dns/pdns-recursor/default.nix
./servers/dns/bind/default.nix
./servers/uhub/default.nix
./servers/sql/oracle-xe/default.nix
./servers/freeradius/default.nix
./servers/xmpp/prosody/default.nix
./servers/http/hiawatha/default.nix
./servers/http/apache-httpd/2.4.nix
./servers/http/lighttpd/default.nix
./servers/home-assistant/default.nix
./servers/varnish/modules.nix
./servers/x11/xorg/overrides.nix
./servers/mail/nullmailer/default.nix
./servers/monitoring/zabbix/2.0.nix
./servers/monitoring/zabbix/2.2.nix
./development/guile-modules/guile-lib/default.nix
./development/mobile/xcodeenv/build-app.nix
./development/mobile/androidenv/androidndk_r8e.nix
./development/mobile/androidenv/androidndk.nix
./development/mobile/androidenv/build-app.nix
./development/mobile/titaniumenv/examples/kitchensink/default.nix
./development/mobile/titaniumenv/build-app.nix
./development/mobile/flashtool/default.nix
./development/tools/database/liquibase/default.nix
./development/tools/build-managers/apache-maven/default.nix
./development/tools/build-managers/cmake/default.nix
./development/tools/build-managers/cmake/2.8.nix
./development/tools/build-managers/gnumake/4.2/default.nix
./development/tools/build-managers/gnumake/4.2/head.nix
./development/tools/github/github-release/default.nix
./development/tools/phantomjs/default.nix
./development/tools/misc/dialog/default.nix
./development/tools/misc/avrdude/default.nix
./development/tools/misc/trv/default.nix
./development/tools/misc/gdb/default.nix
./development/tools/misc/creduce/default.nix
./development/tools/misc/saleae-logic/default.nix
./development/tools/misc/ninka/default.nix
./development/tools/profiling/oprofile/default.nix
./development/tools/analysis/radare/default.nix
./development/tools/analysis/smatch/default.nix
./development/tools/analysis/radare2/default.nix
./development/tools/analysis/verasco/default.nix
./development/tools/neoload/default.nix
./development/tools/ocaml/ocp-indent/1.5.2.nix
./development/tools/ocaml/ocp-indent/default.nix
./development/tools/ocaml/cppo/default.nix
./development/tools/ocaml/merlin/default.nix
./development/tools/ocaml/ocp-index/default.nix
./development/tools/ocaml/opam/default.nix
./development/tools/ocaml/camlp5/5.15.nix
./development/ocaml-modules/ocamlnat/default.nix
./development/ocaml-modules/reactivedata/default.nix
./development/ocaml-modules/vg/default.nix
./development/ocaml-modules/eliom/default.nix
./development/ocaml-modules/lablgtk-extras/default.nix
./development/ocaml-modules/qcheck/default.nix
./development/ocaml-modules/sqlite3EZ/default.nix
./development/ocaml-modules/camlimages/4.1.nix
./development/ocaml-modules/sawja/default.nix
./development/ocaml-modules/otfm/default.nix
./development/ocaml-modules/uucp/default.nix
./development/ocaml-modules/cstruct/ppx.nix
./development/ocaml-modules/cstruct/lwt.nix
./development/ocaml-modules/cstruct/unix.nix
./development/ocaml-modules/cstruct/1.9.0.nix
./development/ocaml-modules/zarith/default.nix
./development/ocaml-modules/gg/default.nix
./development/ocaml-modules/wtf8/default.nix
./development/ocaml-modules/uunf/default.nix
./development/ocaml-modules/cryptokit/default.nix
./development/ocaml-modules/fix/default.nix
./development/ocaml-modules/extlib/default.nix
./development/ocaml-modules/logs/default.nix
./development/ocaml-modules/tuntap/default.nix
./development/ocaml-modules/bolt/default.nix
./development/ocaml-modules/tyxml/default.nix
./development/ocaml-modules/lambda-term/default.nix
./development/ocaml-modules/dtoa/default.nix
./development/ocaml-modules/pprint/default.nix
./development/ocaml-modules/biniou/1.0.nix
./development/ocaml-modules/fieldslib/default.nix
./development/ocaml-modules/cmdliner/default.nix
./development/ocaml-modules/cmdliner/0.9.nix
./development/ocaml-modules/xmlm/default.nix
./development/ocaml-modules/functory/default.nix
./development/ocaml-modules/enumerate/default.nix
./development/compilers/gcc/5/default.nix
./development/compilers/gcc/7/default.nix
./development/compilers/gcc/4.5/default.nix
./development/compilers/gcc/4.5/sources.nix
./development/compilers/gcc/4.8/default.nix
./development/compilers/gcc/4.9/default.nix
./development/compilers/gcc/snapshot/default.nix
./development/compilers/gcc/6/default.nix
./development/compilers/ghc/7.8.4.nix
./development/compilers/ghc/7.8.4-binary.nix
./development/compilers/ghc/8.2.1-binary.nix
./development/compilers/ghc/7.0.4-binary.nix
./development/compilers/ghc/head.nix
./development/compilers/ghc/8.2.2.nix
./development/compilers/ghc/8.0.2.nix
./development/compilers/ghc/8.4.1.nix
./development/compilers/ghc/7.10.3-binary.nix
./development/compilers/ghc/7.4.2.nix
./development/compilers/ghc/7.6.3.nix
./development/compilers/ghc/7.4.2-binary.nix
./development/compilers/ghc/7.10.3.nix
./development/compilers/ghc/7.0.4.nix
./development/compilers/gcl/default.nix
./development/compilers/gcl/2.6.13-pre.nix
./development/compilers/compcert/default.nix
./development/compilers/sbcl/bootstrap.nix
./development/compilers/oraclejdk/jdk-linux-base.nix
./development/compilers/oraclejdk/jdk9-linux.nix
./development/compilers/gnu-smalltalk/default.nix
./development/compilers/nvidia-cg-toolkit/default.nix
./development/compilers/llvm/3.9/llvm.nix
./development/compilers/ccl/default.nix
./development/compilers/ghdl/default.nix
./development/compilers/ocaml/generic.nix
./development/compilers/mezzo/default.nix
./development/ruby-modules/bundled-common/functions.nix
./development/ruby-modules/bundled-common/default.nix
./development/python-modules/gurobipy/darwin.nix
./development/python-modules/gurobipy/linux.nix
./development/python-modules/tensorflow/default.nix
./development/python-modules/matplotlib/default.nix
./development/python-modules/libvirt/default.nix
./development/python-modules/nipype/default.nix
./development/python-modules/cryptography/default.nix
./development/python-modules/pythonix/default.nix
./development/python-modules/rarfile/default.nix
./development/python-modules/wxPython/3.0.nix
./development/python-modules/faker/default.nix
./development/python-modules/h5py/default.nix
./development/python-modules/Theano/default.nix
./development/interpreters/elixir/generic-builder.nix
./development/interpreters/perl/default.nix
./development/interpreters/python/cpython/2.7/default.nix
./development/interpreters/python/cpython/3.6/default.nix
./development/interpreters/python/cpython/3.5/default.nix
./development/interpreters/python/cpython/3.4/default.nix
./development/interpreters/python/pypy/2.7/default.nix
./development/interpreters/lfe/generic-builder.nix
./development/interpreters/eff/default.nix
./development/interpreters/erlang/generic-builder.nix
./development/interpreters/clisp/default.nix
./development/interpreters/clisp/hg.nix
./development/haskell-modules/generic-builder.nix
./development/haskell-modules/lib.nix
./development/haskell-modules/with-packages-wrapper.nix
./development/libraries/glib/default.nix
./development/libraries/libinput/default.nix
./development/libraries/xgboost/default.nix
./development/libraries/qt-3/default.nix
./development/libraries/libxslt/default.nix
./development/libraries/openjpeg/generic.nix
./development/libraries/gloox/default.nix
./development/libraries/libevent/default.nix
./development/libraries/faac/default.nix
./development/libraries/libinfinity/default.nix
./development/libraries/ucommon/default.nix
./development/libraries/qt-5/modules/qtbase.nix
./development/libraries/SDL/default.nix
./development/libraries/openal-soft/default.nix
./development/libraries/gnutls/generic.nix
./development/libraries/oracle-instantclient/default.nix
./development/libraries/vapoursynth/default.nix
./development/libraries/neon/default.nix
./development/libraries/neon/0.29.nix
./development/libraries/libguestfs/default.nix
./development/libraries/libav/default.nix
./development/libraries/gstreamer/libav/default.nix
./development/libraries/gstreamer/bad/default.nix
./development/libraries/sqlcipher/default.nix
./development/libraries/qtkeychain/default.nix
./development/libraries/hwloc/default.nix
./development/libraries/libsidplayfp/default.nix
./development/libraries/webkitgtk/2.18.nix
./development/libraries/webkitgtk/2.4.nix
./development/libraries/v8/3.14.nix
./development/libraries/v8/default.nix
./development/libraries/v8/3.16.14.nix
./development/libraries/libass/default.nix
./development/libraries/science/math/fenics/default.nix
./development/libraries/science/math/caffe2/default.nix
./development/libraries/cairo/default.nix
./development/libraries/freetds/default.nix
./development/libraries/audio/suil/default.nix
./development/libraries/libwebp/default.nix
./development/libraries/libextractor/default.nix
./development/libraries/blitz/default.nix
./development/libraries/wayland/default.nix
./development/libraries/wayland/1.9.nix
./development/libraries/dbus/default.nix
./development/libraries/libpng/default.nix
./development/libraries/libpng/12.nix
./development/libraries/gss/default.nix
./development/libraries/libvpx/default.nix
./development/libraries/libvpx/git.nix
./development/libraries/libarchive/default.nix
./development/libraries/wtk/default.nix
./development/libraries/libbluray/default.nix
./development/libraries/libgcrypt/default.nix
./development/libraries/libgcrypt/1.5.nix
./development/libraries/gnutls-kdh/generic.nix
./development/libraries/physics/geant4/default.nix
./development/libraries/gtk+/3.x.nix
./development/libraries/gtk+/2.x.nix
./development/libraries/java/swt/default.nix
./development/libraries/lame/default.nix
./development/libraries/pcre/default.nix
./development/libraries/wxwidgets/2.8/default.nix
./development/libraries/wxwidgets/3.0/default.nix
./development/libraries/wxwidgets/2.9/default.nix
./development/libraries/fftw/default.nix
./development/libraries/ceres-solver/default.nix
./development/libraries/SDL2/default.nix
./development/libraries/avahi/default.nix
./development/libraries/nghttp2/default.nix
./development/libraries/png++/default.nix
./development/libraries/ffmpeg/generic.nix
./development/libraries/phonon/default.nix
./development/libraries/phonon/backends/vlc.nix
./development/libraries/phonon/backends/gstreamer.nix
./development/libraries/ffmpeg-full/default.nix
./development/libraries/apr-util/default.nix
./development/libraries/glibc/common-2.27.nix
./development/libraries/glibc/default.nix
./development/libraries/glibc/common.nix
./development/libraries/glibc/2.27.nix
./development/libraries/libftdi/1.x.nix
./development/libraries/boost/generic.nix
./development/libraries/sqlite/default.nix
./development/libraries/scmccid/default.nix
./development/arduino/arduino-core/default.nix
./top-level/all-packages.nix
./top-level/python-packages.nix
./top-level/splice.nix
./top-level/impure.nix
./top-level/release-cross.nix
./top-level/php-packages.nix
./games/factorio/default.nix
./games/minecraft/default.nix
./games/tinyfugue/default.nix
./games/dwarf-fortress/wrapper/default.nix
./games/dwarf-fortress/game.nix
./games/ue4demos/default.nix
./games/sdlmame/default.nix
./games/terraria-server/default.nix
./games/steam/runtime-wrapped.nix
./games/zandronum/fmod.nix
./games/oilrush/default.nix
./games/0ad/game.nix
./games/0ad/wrapper.nix
./games/residualvm/default.nix
./games/planetaryannihilation/default.nix
./games/tibia/default.nix
./games/uqm/default.nix
./games/adom/default.nix
./desktops/gnome-3/misc/libgda/default.nix
./desktops/gnome-3/core/gconf/default.nix
./desktops/gnome-2/platform/GConf/default.nix
./desktops/gnome-2/desktop/libgweather/default.nix
./desktops/xfce/panel-plugins/xfce4-pulseaudio-plugin.nix
./os-specific/gnu/hurd/default.nix
./os-specific/gnu/default.nix
./os-specific/gnu/mach/default.nix
./os-specific/gnu/libpthread/default.nix
./os-specific/windows/pthread-w32/default.nix
./os-specific/windows/wxMSW-2.8/default.nix
./os-specific/darwin/native-x11-and-opengl/default.nix
./os-specific/darwin/apple-source-releases/CF/default.nix
./os-specific/darwin/binutils/default.nix
./os-specific/darwin/cctools/port.nix
./os-specific/darwin/ios-cross/default.nix
./os-specific/linux/prl-tools/default.nix
./os-specific/linux/kernel-headers/default.nix
./os-specific/linux/ply/default.nix
./os-specific/linux/amdgpu-pro/default.nix
./os-specific/linux/psmisc/default.nix
./os-specific/linux/libcap/default.nix
./os-specific/linux/ati-drivers/default.nix
./os-specific/linux/busybox/default.nix
./os-specific/linux/drbd/default.nix
./os-specific/linux/usbguard/default.nix
./os-specific/linux/phc-intel/default.nix
./os-specific/linux/lm-sensors/default.nix
./os-specific/linux/libselinux/default.nix
./os-specific/linux/guvcview/default.nix
./os-specific/linux/shadow/default.nix
./os-specific/linux/sch_cake/default.nix
./os-specific/linux/audit/default.nix
./os-specific/linux/exfat/default.nix
./os-specific/linux/bluez/bluez5_28.nix
./os-specific/linux/bluez/default.nix
./os-specific/linux/e1000e/default.nix
./os-specific/linux/lsscsi/default.nix
./os-specific/linux/mdadm/default.nix
./os-specific/linux/uclibc/default.nix
./os-specific/linux/nvidia-x11/generic.nix
./os-specific/linux/facetimehd/default.nix
./os-specific/linux/conky/default.nix
./os-specific/linux/kernel/hardened-config.nix
./os-specific/linux/kernel/manual-config.nix
./os-specific/linux/kernel/generic.nix
./os-specific/linux/kernel/perf.nix
./os-specific/linux/libcap-ng/default.nix
./os-specific/linux/ldm/default.nix
./os-specific/linux/blcr/default.nix
./os-specific/linux/upower/default.nix
./os-specific/linux/xf86-input-multitouch/default.nix
./os-specific/linux/cpufrequtils/default.nix
./os-specific/linux/mwprocapture/default.nix
./os-specific/linux/pmount/default.nix
./os-specific/linux/spl/default.nix
./os-specific/linux/pam_usb/default.nix
./os-specific/linux/dpdk/default.nix
./os-specific/linux/cryptsetup/default.nix
./os-specific/linux/jool/default.nix
./os-specific/linux/wireguard/default.nix
./os-specific/linux/systemd/default.nix
./os-specific/linux/systemd/cryptsetup-generator.nix
./applications/search/recoll/default.nix
./applications/virtualization/bochs/default.nix
./applications/virtualization/8086tiny/default.nix
./applications/virtualization/virt-viewer/default.nix
./applications/virtualization/xen/4.8.nix
./applications/virtualization/xen/4.5.nix
./applications/networking/dropbox/default.nix
./applications/networking/sync/rsync/default.nix
./applications/networking/p2p/qbittorrent/default.nix
./applications/networking/mumble/default.nix
./applications/networking/sniffers/wireshark/default.nix
./applications/networking/instant-messengers/rambox/fetchNodeModules.nix
./applications/networking/instant-messengers/viber/default.nix
./applications/networking/instant-messengers/gajim/default.nix
./applications/networking/instant-messengers/profanity/default.nix
./applications/networking/instant-messengers/jackline/default.nix
./applications/networking/instant-messengers/jitsi/default.nix
./applications/networking/newsreaders/pan/default.nix
./applications/networking/browsers/w3m/default.nix
./applications/networking/browsers/mozilla-plugins/trezor/default.nix
./applications/networking/browsers/qutebrowser/default.nix
./applications/networking/browsers/firefox/common.nix
./applications/networking/browsers/firefox/wrapper.nix
./applications/networking/browsers/midori/default.nix
./applications/networking/browsers/lynx/default.nix
./applications/networking/browsers/firefox-bin/default.nix
./applications/networking/browsers/elinks/default.nix
./applications/networking/ike/default.nix
./applications/networking/remote/freerdp/legacy.nix
./applications/networking/mailreaders/sylpheed/default.nix
./applications/networking/mailreaders/mutt/default.nix
./applications/networking/mailreaders/thunderbird-bin/default.nix
./applications/networking/irc/weechat/default.nix
./applications/networking/irc/quassel/default.nix
./applications/misc/girara/default.nix
./applications/misc/gnuradio-rds/default.nix
./applications/misc/polybar/default.nix
./applications/misc/ranger/default.nix
./applications/misc/kdbplus/default.nix
./applications/misc/playonlinux/default.nix
./applications/misc/ipmiview/default.nix
./applications/misc/xpdf/default.nix
./applications/misc/adobe-reader/default.nix
./applications/misc/llpp/default.nix
./applications/misc/gnuradio-osmosdr/default.nix
./applications/misc/gqrx/default.nix
./applications/misc/lilyterm/default.nix
./applications/misc/gnuradio-ais/default.nix
./applications/misc/gnuradio-gsm/default.nix
./applications/misc/xxkb/default.nix
./applications/misc/gnuradio-nacl/default.nix
./applications/misc/zathura/core/default.nix
./applications/misc/ikiwiki/default.nix
./applications/video/mpv/default.nix
./applications/video/avidemux/default.nix
./applications/video/kodi/default.nix
./applications/video/miro/default.nix
./applications/video/mkvtoolnix/default.nix
./applications/video/bomi/default.nix
./applications/video/mplayer/default.nix
./applications/video/vlc/default.nix
./applications/video/aegisub/default.nix
./applications/science/math/mxnet/default.nix
./applications/science/math/giac/default.nix
./applications/science/math/caffe/default.nix
./applications/science/math/cntk/default.nix
./applications/science/math/ripser/default.nix
./applications/science/logic/coq/8.3.nix
./applications/science/logic/acgtk/default.nix
./applications/science/logic/verifast/default.nix
./applications/science/molecular-dynamics/lammps/default.nix
./applications/science/machine-learning/sc2-headless/default.nix
./applications/science/machine-learning/shogun/default.nix
./applications/audio/yoshimi/default.nix
./applications/audio/fmit/default.nix
./applications/audio/deadbeef/default.nix
./applications/audio/google-musicmanager/default.nix
./applications/audio/pulseaudio-dlna/default.nix
./applications/audio/spotify/default.nix
./applications/audio/tomahawk/default.nix
./applications/audio/projectm/default.nix
./applications/audio/ncmpcpp/default.nix
./applications/audio/aumix/default.nix
./applications/audio/lash/default.nix
./applications/audio/cantata/default.nix
./applications/audio/cmus/default.nix
./applications/version-management/git-and-tools/git-recent/default.nix
./applications/version-management/subversion/default.nix
./applications/version-management/monotone/default.nix
./applications/version-management/monotone-viz/graphviz-2.0.nix
./applications/window-managers/notion/default.nix
./applications/window-managers/fvwm/default.nix
./applications/window-managers/xmonad-log-applet/default.nix
./applications/office/mendeley/default.nix
./applications/graphics/exrdisplay/default.nix
./applications/graphics/draftsight/default.nix
./applications/graphics/sane/xsane.nix
./applications/graphics/seg3d/default.nix
./applications/graphics/gqview/default.nix
./applications/editors/nano/default.nix
./applications/editors/eclipse/default.nix
./applications/editors/eclipse/plugins.nix
./applications/editors/sublime3/default.nix
./applications/editors/sublime/default.nix
./applications/editors/jetbrains/default.nix
./applications/editors/vim/qvim.nix
./applications/editors/music/tuxguitar/default.nix
./applications/editors/emacs/default.nix
@shlevy
Copy link
Member

shlevy commented Mar 2, 2018

👍 from me. I think some asserts are true sanity checks about argument compatibility, but the rest should switch to meta.

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 2, 2018

Is there any reason not to move argument compatibility sanity checks to meta.broken, too? After all, a package with withGtk==true and gtk == null is for all practical purposes broken…

@Ericson2314
Copy link
Member

Additinally, with #36226 I don't think there is any more reason for somePkg ? null. I mean, it isn't like we're using packages in nixpkgs in a smaller package set, right?.

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 2, 2018

Well, sometimes these have to be extracted from a nested package set (like pythonPackages)

@Ericson2314
Copy link
Member

I'd say, if the assert only results from user error, and not any arbitrary broken packages situation, then the assert is fine. For example:

{ withFoo ? foo.meta.available, foo }:

assert withFoo -> foo.meta.available;

The assertion respects the default, so it would only fail in the presence of user overrides. And users should in fact only do overrides to make things less enabled. If some optional feature is needed downstream, but it in that downstream package's meta.broken.

@rnhmjoj
Copy link
Contributor

rnhmjoj commented Mar 3, 2018

So, I want to make sure I understand correctly.
For example is this ok?

{ x11Support ? stdenv.isLinux, mesa }:

assert x11Support -> libX11.meta.available && libXext.meta.available [...];

[...]
buildInputs = [...] ++ optionals x11Support [ libX11 libXext mesa libXxf86vm ];

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 3, 2018

@Ericson2314 from time to time people use some kind of a deep override; it would be nice if a global deep override of libxcb to null worked in a comprehensible way.

What is the benefit of not putting this condition into meta.broken?

@oxij
Copy link
Member

oxij commented Mar 3, 2018 via email

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 3, 2018

Of all things, running X during a build is trivial: https://github.com/7c6f434c/lang-os/blob/master/firefox-profile.nix

Whether we want it is another question.

USE flags, multiple kinds of brokenness etc. require maintenance effort to continue making sense, which makes achieving buy-in harder…

@Ericson2314
Copy link
Member

@oxij look up rust portability lint. Fuzzing would never exhaust space but we could with SAT solver.

@rmhnjoj. I don't think so, because a Linux host platform does not always ensure those packages are available. If it did however, that would be good.

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 3, 2018

The problem is that we are talking about build failures, and that cannot be just fed to SAT solver. The only thing you can hope for is increasing the chance of a problem being found per minute of build.

@oxij
Copy link
Member

oxij commented Mar 3, 2018 via email

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 3, 2018 via email

@oxij
Copy link
Member

oxij commented Mar 3, 2018 via email

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 3, 2018

Oh well. The real problem is: you say «worse», what you mean is it allows strictly less, I agree that the solution in Nixpkgs will be worse, but there is the position that it will do less and will be in some sense more lightweight and so it will be in some sense «better».

I have already implemented and committed multiple solutions to remove duplication between buildInputs and the function parameters, and all of them were explicitly criticised (not silently ignored) even when I was only committing them into packages that nobody but me updated. So I assume that some things will never happen — not because of stalling or problems with decision-making, but because of explicit opposition of many people. Powerful usable overrides are considered harmful, oh well. I don't want so many overrides to justify not using Hydra binaries for the rest of the system.

Also, I tried to keep a couple of latest versions by default for libraries, and that also was explicitly rejected. I think there is some idea about too many combinations making things untestable or the exact use pattern of library versions hard to establish or risk of having different default dependency versions for downstream packages and problems when combining them further downstream.

The thing that happens with 3–5 years and limited implementation is not based as much on NIH, as on accumulation of support for some feature that makes reverting a small enough implementation unattractive.

The detail with packageOverrides is that the complicated packageOverrides expression is really a one-time cost, not per-package.

Ignoring all these flags etc. and just passing null leads to shorter default-case expressions anyway (and that is what too many people care about). As for nulls not allowing to check something — why exactly? I can check for null just fine.

Copy-pastey expressions are not enough. when they are enough, if I fully buy all the idea that a separate version should not be specified, come at 16 non-blank lines with 10 lines to actually fill. Platforms from deps is iffy, unifying deps and arguments meets pushback, and the rest actually requires human input. So when you find out that people want the most limited packages possible, there is just nothing to generate.

It is probably better to make as much of the distinctions inside Nixpkgs as possible library functions, and not these splits into the lists like nativeBuildInputs. The most expensive part of Nixpkgs is the leaf package expressions, and if one could just give them a different stdenv.mkDerivation, the package version/patch database could be maintained together by everyone and the stdenvs could be different.

In the context of meta.broken, that probably means putting everything into meta.broken; maybe with optional-trace-generating wrappers around groups of conditions to hint whether the failure is likely to be a buildtime or a runtime one.

@oxij
Copy link
Member

oxij commented Mar 4, 2018 via email

@aneeshusa
Copy link
Contributor

I find that I run into a bad interaction of having asserts at the top level of a package expression with overrides. Namely, if an assert fires due to an a change from an overlay, then a future use of .override on that package which would normally pass the assert doesn't work. An example (not that I actually want to remove http2 support, but can't remember which package I was working with when this bit me):

# in an overlay
self: super: {
  nghttp2 = null; # causes curl to fire assert, as curl defaults http2Support to true
  curl = super.curl.override { http2Support = false; } # doesn't fix the issue; happens too late
}

The only way I've found to fix this is to make the assert lazier by placing it right before nghttp2 is used, i.e. replace

optional http2Support nghttp2 ++

with

optional http2Support (assert nghttp2 != null; nghttp2) ++

While I do like having these checks, it's a bit annoying to have to manually lazy-ify each one. I hope a better design here can avoid this problem; I haven't spent the time to read through this thread and all the proposals, but for example I think something like #36229 (comment) might still be prone to this issue.

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 4, 2018 via email

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 4, 2018 via email

@oxij
Copy link
Member

oxij commented Mar 4, 2018 via email

@oxij
Copy link
Member

oxij commented Mar 4, 2018 via email

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 4, 2018 via email

@oxij
Copy link
Member

oxij commented Mar 4, 2018 via email

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 4, 2018 via email

@danbst
Copy link
Contributor

danbst commented Mar 6, 2018

I've proposed a similar PR a while ago #32019. This would fix #11226 (comment) and #31884

It took only 20 files to edit to make nixpkgs evaluatable on non-cross setup. Also, note that some asserts are used as license checks, so can't be treated as "broken"

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 6, 2018 via email

@7c6f434c
Copy link
Member Author

7c6f434c commented Mar 6, 2018

Updated the description re: license check and re: stdenv exclusion

@Ekleog
Copy link
Member

Ekleog commented May 22, 2019

@7c6f434c Care to turn this into a proper RFC, so that a “definitive” decision could be made?

@stale

This comment has been minimized.

@stale stale bot added the 2.status: stale https://github.com/NixOS/nixpkgs/blob/master/.github/STALE-BOT.md label Jun 2, 2020
@siraben
Copy link
Member

siraben commented Apr 10, 2021

Still relevant.

@piegamesde
Copy link
Member

Closing this. This issue is so outdated, we'd need somebody motivated to evaluate the current situation and open a new issue. I don't think this will require an RFC though.

@piegamesde piegamesde closed this as not planned Won't fix, can't repro, duplicate, stale Sep 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
0.kind: enhancement 2.status: stale https://github.com/NixOS/nixpkgs/blob/master/.github/STALE-BOT.md 2.status: work-in-progress 6.topic: portability General portability concerns, not specific to cross-compilation or a specific platform 9.needs: community feedback 10.rebuild-darwin: 0 10.rebuild-linux: 0 11.by: nixpkgs-member
Projects
None yet
Development

No branches or pull requests

10 participants