Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jZQe5-0003WD-Iz for pljava-dev@arkaria.postgresql.org; Fri, 15 May 2020 03:04:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jZQe4-0001iG-Hh for pljava-dev@arkaria.postgresql.org; Fri, 15 May 2020 03:04:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jZQe4-0001hs-1m for pljava-dev@lists.postgresql.org; Fri, 15 May 2020 03:04:20 +0000 Received: from anastigmatix.net ([68.171.219.55]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jZQe1-0007Lo-Lq for pljava-dev@lists.postgresql.org; Fri, 15 May 2020 03:04:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=anastigmatix.net; s=default; h=Content-Transfer-Encoding:Content-Type: MIME-Version:Date:Message-ID:Subject:From:To:Sender:Reply-To:Cc:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=U73UHJst+CDxq5J7fmgE1B7Lb+B1h9yOiuPcqvjUbG8=; b=OjmeQKX3q8DLfnJw+edo2VmTqy VuSyLlDv6LAcEJucvZp2/FvvyjsfRatKplf5AaYZ0jPVdRlEmwnc99hncRYDehEuTVpwZrdxxQZLo 48Bw0tcQksSEOo0TILL/HnoSl7PUfX0TzgxX7SKm1Z3XXMJhqnShx235Fsd+awwZYM2UGhLfWQ2mz AcA9Grn/KeVLB1+fZeVRW/fTk8aNvO82sZUrexYWAp5+2Wnqma50pAJhtj/eMwT++UfCVYq40cDgo ixCugPzCFl50XkDN41mFRa3rRwkuD/7Jvq+2nX62HELxmGFRoZs94gOCeno5WJokaZz/faALl1cj3 vq7a7dZQ==; Received: from [184.19.31.139] (port=53507) by bay.acenet.us with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1jZQdz-00ALCs-5H for pljava-dev@lists.postgresql.org; Thu, 14 May 2020 23:04:16 -0400 To: pljava-dev@lists.postgresql.org From: Chapman Flack Subject: Please welcome Kartik Ohri, for Google Summer of Code 2020! X-Enigmail-Draft-Status: N1110 Message-ID: <5EBE06AE.9070603@anastigmatix.net> Date: Thu, 14 May 2020 23:04:14 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-OutGoing-Spam-Status: No, score=-95.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bay.acenet.us X-AntiAbuse: Original Domain - lists.postgresql.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - anastigmatix.net X-Get-Message-Sender-Via: bay.acenet.us: authenticated_id: chap@anastigmatix.net X-Authenticated-Sender: bay.acenet.us: chap@anastigmatix.net X-Source: X-Source-Args: X-Source-Dir: X-From-Rewrite: unmodified, already matched List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk Under the auspices of the PostgreSQL organization, some PL/Java work was proposed for Google Summer of Code 2020. Please welcome Kartik Ohri, who will be working on several improvements to the way PL/Java is built. In the early stages of the work, we should at last have Continuous Integration in place at GitHub, testing on multiple platforms, which should make releasing new PL/Java versions much less anxiety-prone. In response to a long history of requests, we should at last have the pljava-api jar deployed to Maven's central repository, where it can be automatically fetched as a dependency for building PL/Java user code. In the most ambitious part of the work, Kartik will be tackling the longstanding awkwardness of the native-code part of the build, which is currently done using the nar-maven-plugin. Other than being an existing plugin capable of building C code, that plugin has never been a particularly comfortable fit for this project: - It was designed to build a particular kind of 'native archive' that PL/Java doesn't need. - It does not automatically pick up the same compiler options via pg_config that were used to build PostgreSQL (for which our issue #152 has been open a long time). - In particular, it does not use the same warning-suppression options that are used in the PostgreSQL build, and is very noisy with warnings in upstream PostgreSQL's .h files that are not of concern upstream because PostgreSQL's build suppresses them. This annoys everyone, and the single most common build problem reported for PL/Java involves some simple real error, like a missing dependency, that is too hard to pick out from the torrent of needless warnings. - It is unable to properly quote, on Windows, arbitrary arguments to be passed to a spawned compiler (our issue #190). - It improperly quotes names of source files if PL/Java is being built in a directory whose path contains a space (our very recent issue #261). The result of addressing these points will probably be a new Maven plugin to be used in PL/Java's build, in place of the nar-maven-plugin. (Thanks to Ken Olson's earlier contributions, we know it is also possible to embed JavaScript to good effect in a Maven build, but the combination of issues to be solved here will probably weigh in favor of a new, purpose-built plugin.) The quoting-for-Windows issue is one of unexpected depth, as the root of the problem is not in Maven or any Maven plugin, but in Java's Process API itself, which is well suited to the POSIX exec behavior that preserves a list of distinct arguments, and has no provision for the actual situation on Windows, where the distinct arguments must be joined into one string, with quoting added according to the lexical rules of the program that will receive them, which are not universally consistent! It turns out that the history of pain in the wider Java community from that API design is long, numerous related Java bug reports exist, and the code itself shows a history of reactive tweaks rather than a systematic reconsideration. In one extreme example, in response to a report of command injection that was possible because of incorrect quoting, the quoting rules were made to be different when a Java security manager is in place! The import of all that is that a good solution developed here could be of benefit to the wider Java community (on Windows anyway) as well as to the immediate goal of improving PL/Java's build. Because Google Summer of Code guidelines call for project communication to be on public and archived channels, you should expect to see more traffic on this list than in the recent past. I hope some of it will be interesting. I will also be setting up access for Kartik to the project wiki, so that evolving design documents, etc., can be there, to find a balance that does not put too much traffic on this list. I am looking forward to significant improvements in the experience of building PL/Java thanks to this project! Regards, -Chap