<div dir="ltr">I&#39;m not thrilled with those user agents are being handled right now, and I&#39;m curious to get some thoughts. Take, for example the Safari user-agent string of: <div><br></div><div>&gt; Safari/11601.3.9 CFNetwork/760.2.6 Darwin/15.2.0 (x86_64)<span class="" style="white-space:pre">        </span><div><br></div><div>Right now, this gets parsed as:</div><div><br></div><div>&gt; name=Safari,</div><div>&gt; version=[</div><div>&gt;       major=11601, </div><div>&gt;       minor=3, </div><div>&gt;       minor2=9, </div><div>&gt;       minor3=&lt;uninitialized&gt;, </div><div>&gt;       addl=CFNetwork/760</div><div>&gt; ], </div><div>&gt; unparsed_version=Safari/11601.3.9 CFNetwork/760.2.6 Darwin/15.2.0 (x86_64)<br></div><div><br></div><div>RFC 7231 says:</div><div><br></div><div>&gt; &quot;The User-Agent field-value consists of one or more product identifiers, each followed by zero or more comments (Section 3.2 of [RFC7230]), which together identify the user agent software and its significant subproducts.&quot;</div><div><br></div><div>What I would like to see is this user-agent generate three separate entries in software.log:</div><div><br></div><div>&gt; Safari 11601.3.9</div><div>&gt; CFNetwork 760.2.6</div><div>&gt; Darwin 15.2.0 (x86_64)</div><div><br></div><div>I think this is a better representation of the software that&#39;s actually running on the machine (they&#39;re running this version of Safari, this version of the CFNetwork library, and this version of the Darwin kernel).</div><div><br></div><div><div>Taking this to the server-side, given:</div><div><br></div><div>&gt; Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/0.9.8j-fips mod_auth_kerb/5.4 PHP/5.4.13 </div><div><br></div><div>I&#39;d like to see:</div><div><br></div><div>&gt; Apache/2.2.25 (Unix)</div><div>&gt; mod_ssl/2.2.25</div><div>&gt; OpenSSL/0.9.8j-fips</div><div>&gt; mod_auth_kerb/5.4</div><div>&gt; PHP/5.4.13</div><div><br></div></div></div><div><span style="white-space:pre">All of those are pieces of software running on that system, and maintaining it as a user-agent is a construct from HTTP, which I don&#39;t feel belongs in the software.log. Another warning sign that this is an area that could use some work is the comment above Software::parse:</span></div><div><span style="white-space:pre"><br></span></div><div><span style="white-space:pre">&gt; # Don&#39;t even try to understand this now, just make sure the tests are working.</span></div><div><span style="white-space:pre"><br></span></div><div><span style="white-space:pre">Curious to hear thoughts on this.</span></div><div><span style="white-space:pre"><br></span></div><div><span style="white-space:pre">  --Vlad</span></div></div>