<div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Sep 18, 2018 at 11:55 AM Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Tue, Sep 18, 2018 at 08:12:20AM -0400, Thomas Ward wrote:<br>
> Downstream in Ubuntu, it has been proposed to demote pcre3 and <br>
> use pcre2 instead as it is newer.<br>
> <a href="https://trac.nginx.org/nginx/ticket/720" rel="noreferrer" target="_blank">https://trac.nginx.org/nginx/ticket/720</a> shows it was marked 4 <br>
> years ago that NGINX does not support pcre2.  Are there any <br>
> plans to use pcre2 instead of pcre3?<br>
There are no immediate plans.<br>
When we last checked, there were no problems with PCRE, but PCRE2 <br>
wasn't available in most distributions we support, making the <br>
switch mostly meaningless.<br></blockquote><div><br></div><div>I think there have been changes since then. PCRE2 was new in 2015, but isn't new in 2018.</div><div><br></div><div>RHEL 7 (and clones) include libpcre2. I think this is a pretty wide set of machines right here. I believe Ubuntu 16.04 LTS has libpcre2 which is another wide set. Fedora has had it for a while now. I think that unless you go to older releases, all major distributions should have PCRE2 by now.</div><div><br></div><div>I build haproxy with PCRE2 support.</div><div><br></div><div>One that was interesting to me, is that Git recently (April, 2018?) switched to building with PCRE2 by default when "USE_LIBPCRE=Yes" was specified:</div><div><br></div><div><a href="https://github.com/git/git/commit/cac5351363c5713248b8494e1e58e282c0a5bde7">https://github.com/git/git/commit/cac5351363c5713248b8494e1e58e282c0a5bde7</a><br></div><div><br></div><div>I'm not sure about meaningless from a functionality perspective. All new features are going into PCRE2. PCRE is a stable branched with only bug fixes and security problems fixed. The newest features, including performance improvements, are all in PCRE2. I believe the reason it is "PCRE2-10" instead of "PCRE-10", is because of API changes, and the opportunity to improve or fix previous API decisions. This then becomes the basis for all future development free of the PCRE API shackles.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Also, it looks like PCRE2 is still not supported even by Exim, <br>
which is the parent project of PCRE and PCRE2:<br>
<br>
<a href="https://bugs.exim.org/show_bug.cgi?id=1878" rel="noreferrer" target="_blank">https://bugs.exim.org/show_bug.cgi?id=1878</a></blockquote><div><br></div><div>I don't think Exim should be the measure:</div><div><br></div><div>"<span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">PCRE was originally written for the </span><a href="https://www.exim.org/" style="font-family:"Times New Roman";font-size:medium">Exim MTA</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, but is now used by many high-profile open source projects, including </span><a href="https://httpd.apache.org/" style="font-family:"Times New Roman";font-size:medium">Apache</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="http://www.php.net/" style="font-family:"Times New Roman";font-size:medium">PHP</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="https://www.kde.org/" style="font-family:"Times New Roman";font-size:medium">KDE</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="http://www.postfix.org/" style="font-family:"Times New Roman";font-size:medium">Postfix</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, and </span><a href="https://nmap.org/" style="font-family:"Times New Roman";font-size:medium">Nmap</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">. PCRE has also found its way into some well known commercial products, like </span><a href="https://www.apple.com/safari/" style="font-family:"Times New Roman";font-size:medium">Apple Safari</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">. Some other interesting projects using PCRE include </span><a href="http://www.call-with-current-continuation.org/" style="font-family:"Times New Roman";font-size:medium">Chicken</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="http://www.ferite.org/" style="font-family:"Times New Roman";font-size:medium">Ferite</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="http://www.canonware.com/onyx/" style="font-family:"Times New Roman";font-size:medium">Onyx</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="http://www.hypermail-project.org/" style="font-family:"Times New Roman";font-size:medium">Hypermail</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="http://leafnode.sourceforge.net/" style="font-family:"Times New Roman";font-size:medium">Leafnode</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="http://www.askemos.org/" style="font-family:"Times New Roman";font-size:medium">Askemos</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, </span><a href="http://www.wenlin.com/" style="font-family:"Times New Roman";font-size:medium">Wenlin</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">, and </span><a href="http://8th-dev.com/" style="font-family:"Times New Roman";font-size:medium">8th</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">."</span></div><div><br></div><div>This list is also far from complete. PCRE and PCRE2 are widely used, and PCRE2 is where all current improvement is occurring. Anybody waiting for Exim, will probably be among the very last to switch.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
As such, adding PCRE2 support to nginx looks premature.<br></blockquote></div><div dir="ltr"><br></div><div dir="ltr"><br></div><div>Before writing the above, I was debating with myself about when the right time to add support for a new component release is. For some projects and some components, it will be more important than others. For example, OpenSSL 1.1.1 with TLSv1.3 support might be considered premature for some projects to support, and yet Nginx supports this newly released version long before OpenSSL 1.1.1 is readily available in a majority of distributions that you support. I think in this case, OpenSSL 1.1.1 is of strategic importance to Nginx, and this ensured it was on the roadmap. (However, it still seems to be missing an ability to configure the cipher suite... :-) )</div><div><br></div><div>I don't know if PCRE2 belongs on this roadmap. I think there have been significant improvements with the JIT compilation that could prove useful for higher performance evaluation of regular expressions with Nginx, but I personally don't have this requirement, so if after considering all of the above - you still felt it was premature, I wouldn't raise any concern personally. I just want to make sure this is an informed position. :-)</div><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Mark Mielke <<a href="mailto:mark.mielke@gmail.com" target="_blank">mark.mielke@gmail.com</a>><br><br></div></div></div>