]> git.ipfire.org Git - thirdparty/systemd.git/commit
hostname: improve the algorithm in hostname_pick_word() 42566/head
authorMichael Vogt <michael@amutable.com>
Wed, 17 Jun 2026 07:51:53 +0000 (09:51 +0200)
committerMichael Vogt <michael@amutable.com>
Sat, 20 Jun 2026 12:26:41 +0000 (14:26 +0200)
commit1ada9064e65410fabadd57b281dbc8a42e0e0a6f
tree76894597e9a2c0b4a96aba553537e976687936a7
parentc3c735bd09cd3f894703a7b07327551b96933607
hostname: improve the algorithm in hostname_pick_word()

Lennart suggested to use a more uniform algorithm for
the picking of the hostname words that is not biased
for long words by just (predictably) randomly going over
the offsets until we land on a word boundary. This is a
very nice suggestion so this commit implements it with
a fallback to the "old" behavior if we do not find a
word boundary within a reasonable amount of attempts.

A small python script shows that 64 iterations plus
fallback is a good number:
```
$ python3 simulate-hostname-pick.py 64
hostname-wordlist/adverbs
  words=261  p_accept=0.1119  avg_bytes/word=1/p=8.94
  max_iterations=64, n_trials=1000000
    fallback rate       :   0.051000%  (510/1_000_000)
    mean seeks per word :        8.93

hostname-wordlist/adjectives
  words=449  p_accept=0.1380  avg_bytes/word=1/p=7.24
  max_iterations=64, n_trials=1000000
    fallback rate       :   0.007500%  (75/1_000_000)
    mean seeks per word :        7.25

hostname-wordlist/nouns
  words=449  p_accept=0.1472  avg_bytes/word=1/p=6.79
  max_iterations=64, n_trials=1000000
    fallback rate       :   0.002700%  (27/1_000_000)
    mean seeks per word :        6.79
```
Combined with the fallback to the previous method if
we can't find anything within the 64 attemps this seems
to be the best tradeoff and give us very good uniformity.
hostname-wordlist/README
src/shared/hostname-setup.c