Comment 17 for bug 1824260

Revision history for this message
xiota (xiota) wrote :

The following config would be better than the one I proposed earlier:

    <alias binding="same">
      <family>CourierStd</family>
      <accept>
      <family>Courier</family>
      </accept>
    </alias>

    <alias>
      <family>CourierStd</family>
      <default><family>monospace</family></default>
    </alias>

I submitted a request to fontconfig:

    https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/262

-----

What one person considers sane isn't necessarily so.
*Assuming* sane defaults isn't really sensible.

Here are some examples, not directly related to the issue at hand:

  * In a "sane" configuration, we'd expect a list of monospace fonts
    when requesting the generic monospace font family. Similarly for
    the generic serif and sans-serif families. However, the following
    commands show that fonts of all three types are included in all of
    the generic families.

       fc-match -s monospace
       fc-match -s sans-serif
       fc-match -s serif

    Normally, it doesn't cause problems because fonts of the right
    type are at the beginning of the list. However, if a specific font
    is requested, an obviously incorrect substitution can be made
    (eg, sans-serif font shown when serif was requested) because fonts
    of all types are in all of the lists.

  Maybe developers in the past thought it was fine because some
  config further along could be assumed to have sane defaults?
  Or maybe they thought it was just a theoretical problem that
  wouldn't ever occur? But it's not just theoretical. I have
  encountered real issues, which is why I know of it at all.

  * Many people believe that if they request a font that isn't
    installed, Ubuntu will substitute a font it "thinks" looks
    similar. They don't realize that it has to be defined in the
    config files.

    So if they request a font that's not defined, like CourierStd,
    Ubuntu will fallback to sans-serif, even though every human
    immediately knows the Courier substitutions should be used –
    and that would be the sane default. But here, we're explicitly
    deciding *not* to, even knowing there is a theoretical risk of
    problematic substitutions in the future.