Add gcj discussion.

This commit is contained in:
Bruce Momjian 2002-11-02 02:27:49 +00:00
parent 62636a3d4b
commit 08dd92cdeb
1 changed files with 480 additions and 0 deletions

View File

@ -2244,3 +2244,483 @@ TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly
From pgsql-hackers-owner+M31158@postgresql.org Wed Oct 30 14:31:27 2002
Return-path: <pgsql-hackers-owner+M31158@postgresql.org>
Received: from postgresql.org (postgresql.org [64.49.215.8])
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g9UJVQU07194
for <pgman@candle.pha.pa.us>; Wed, 30 Oct 2002 14:31:26 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP
id 353C9476C3C; Wed, 30 Oct 2002 14:30:18 -0500 (EST)
Received: from postgresql.org (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with SMTP
id D8787476C72; Wed, 30 Oct 2002 14:30:06 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP id A8D81476C42
for <pgsql-hackers@postgreSQL.org>; Wed, 30 Oct 2002 14:29:57 -0500 (EST)
Received: from sss.pgh.pa.us (unknown [192.204.191.242])
by postgresql.org (Postfix) with ESMTP id 04987476C71
for <pgsql-hackers@postgreSQL.org>; Wed, 30 Oct 2002 14:29:57 -0500 (EST)
Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
by sss.pgh.pa.us (8.12.5/8.12.5) with ESMTP id g9UJTvhR000820
for <pgsql-hackers@postgreSQL.org>; Wed, 30 Oct 2002 14:29:57 -0500 (EST)
To: pgsql-hackers@postgresql.org
Subject: [HACKERS] PG functions in Java: maybe use gcj?
Date: Wed, 30 Oct 2002 14:29:57 -0500
Message-ID: <819.1036006197@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
X-Virus-Scanned: by AMaViS new-20020517
Precedence: bulk
Sender: pgsql-hackers-owner@postgresql.org
X-Virus-Scanned: by AMaViS new-20020517
Status: OR
I had an interesting conversation today with Tom Tromey and Andrew Haley
of Red Hat about how to implement "pljava" for Postgres. Rather than
futzing with an external JVM, their thought is to use gcj (gcc compiling
Java). It sounds like this approach would mostly just work, modulo
needing to use a small amount of C++ code to call the defined APIs for
gcj.
This would not be a perfect solution: gcj isn't yet ported everywhere,
and it would probably not play nice on machines where the standard C
library isn't thread-safe. But it seems a lot more within reach than
the approaches we've discussed in the past.
I'm not volunteering to try to do this, but I wanted to toss the idea
up in the air and see if anyone wants to try it. Tom and Andrew
indicated they'd be willing to help out with advice etc for anyone
who wants to take on the project.
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
From pgsql-hackers-owner+M31173@postgresql.org Wed Oct 30 22:51:48 2002
Return-path: <pgsql-hackers-owner+M31173@postgresql.org>
Received: from postgresql.org (postgresql.org [64.49.215.8])
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g9V3pkU27163
for <pgman@candle.pha.pa.us>; Wed, 30 Oct 2002 22:51:46 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP
id CC02B476CE9; Wed, 30 Oct 2002 22:51:42 -0500 (EST)
Received: from postgresql.org (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with SMTP
id 30D78476087; Wed, 30 Oct 2002 22:51:25 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP id 49189475A1E
for <pgsql-hackers@postgresql.org>; Wed, 30 Oct 2002 22:51:18 -0500 (EST)
Received: from mail.xythos.com (sdsl-216-36-77-241.dsl.sjc.megapath.net [216.36.77.241])
by postgresql.org (Postfix) with ESMTP id B9C5B474E5C
for <pgsql-hackers@postgresql.org>; Wed, 30 Oct 2002 22:51:17 -0500 (EST)
Received: from ravms by mail.xythos.com with mail-ok (Exim 3.36 #3)
id 1876OD-0006U9-00; Thu, 31 Oct 2002 03:53:01 +0000
Received: from h-66-166-17-184.snvacaid.covad.net ([66.166.17.184] helo=xythos.com)
by mail.xythos.com with asmtp (Exim 3.36 #3)
id 1876OC-0006Ty-00; Thu, 31 Oct 2002 03:53:00 +0000
Message-ID: <3DC0AA42.4000205@xythos.com>
Date: Wed, 30 Oct 2002 19:57:54 -0800
From: Barry Lind <blind@xythos.com>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020826
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: Tom Lane <tgl@sss.pgh.pa.us>
cc: pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] PG functions in Java: maybe use gcj?
References: <819.1036006197@sss.pgh.pa.us>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
X-Envelope-To: tgl@sss.pgh.pa.us,
pgsql-hackers@postgreSQL.org
X-Virus-Scanned: by AMaViS new-20020517
Precedence: bulk
Sender: pgsql-hackers-owner@postgresql.org
X-Virus-Scanned: by AMaViS new-20020517
Status: OR
I am not sure I follow. Are you suggesting:
1) create function takes java source and then calls gcj to compile it
to native and build a .so from it that would get called at runtime?
or
2) create function takes java source and just compiles to java .class
files and the runtime invokes the gcj java interpreter.
or I guess you could do both at the same time.
In either case I am concerned about licensing issues. gcj is not under
a BSD style license. Depending on what you need you are either dealing
with regular GPL, LGPL, or LGPL with a special java exception.
I beleive (without giving it too much thought) that doing either 1 or 2
above would end up linking GPL code into postgres. This can be worked
around by requiring the the necessary gcj libraries be installed
separately and detected at configure time (like is done elsewhere). But
is does (I think) present a problem for commercial products that would
like to redistribute postgres with pljava.
Another challenge here it that the java code is going to want to use the
jdbc api when communicating with the database. One difficulty here is
getting jdbc to be part of the same transaction as the calling java
function. Such that if the java stored procedure selects or updates
data it is doing it in the same transaction as the caller of the
function. Today the jdbc driver only knows how to communicate via the
FE/BE protocol which will end up creating a new process and transaction.
The jdbc driver would need to not use the FE/BE protocol but instead
probably use jni calls.
thanks,
--Barry
Tom Lane wrote:
> I had an interesting conversation today with Tom Tromey and Andrew Haley
> of Red Hat about how to implement "pljava" for Postgres. Rather than
> futzing with an external JVM, their thought is to use gcj (gcc compiling
> Java). It sounds like this approach would mostly just work, modulo
> needing to use a small amount of C++ code to call the defined APIs for
> gcj.
>
> This would not be a perfect solution: gcj isn't yet ported everywhere,
> and it would probably not play nice on machines where the standard C
> library isn't thread-safe. But it seems a lot more within reach than
> the approaches we've discussed in the past.
>
> I'm not volunteering to try to do this, but I wanted to toss the idea
> up in the air and see if anyone wants to try it. Tom and Andrew
> indicated they'd be willing to help out with advice etc for anyone
> who wants to take on the project.
>
> regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/users-lounge/docs/faq.html
From pgsql-hackers-owner+M31175@postgresql.org Wed Oct 30 23:10:42 2002
Return-path: <pgsql-hackers-owner+M31175@postgresql.org>
Received: from postgresql.org (postgresql.org [64.49.215.8])
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g9V4AeU28809
for <pgman@candle.pha.pa.us>; Wed, 30 Oct 2002 23:10:41 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP
id 8C73B476AD5; Wed, 30 Oct 2002 23:10:33 -0500 (EST)
Received: from postgresql.org (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with SMTP
id 2E9DC4761DF; Wed, 30 Oct 2002 23:10:31 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP id 1A441475A1E
for <pgsql-hackers@postgreSQL.org>; Wed, 30 Oct 2002 23:10:25 -0500 (EST)
Received: from sss.pgh.pa.us (unknown [192.204.191.242])
by postgresql.org (Postfix) with ESMTP id 7D378474E5C
for <pgsql-hackers@postgreSQL.org>; Wed, 30 Oct 2002 23:10:24 -0500 (EST)
Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
by sss.pgh.pa.us (8.12.5/8.12.5) with ESMTP id g9V4AThR003716;
Wed, 30 Oct 2002 23:10:29 -0500 (EST)
To: Barry Lind <blind@xythos.com>
cc: pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] PG functions in Java: maybe use gcj?
In-Reply-To: <3DC0AA42.4000205@xythos.com>
References: <819.1036006197@sss.pgh.pa.us> <3DC0AA42.4000205@xythos.com>
Comments: In-reply-to Barry Lind <blind@xythos.com>
message dated "Wed, 30 Oct 2002 19:57:54 -0800"
Date: Wed, 30 Oct 2002 23:10:28 -0500
Message-ID: <3715.1036037428@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
X-Virus-Scanned: by AMaViS new-20020517
Precedence: bulk
Sender: pgsql-hackers-owner@postgresql.org
X-Virus-Scanned: by AMaViS new-20020517
Status: OR
Barry Lind <blind@xythos.com> writes:
> I am not sure I follow. Are you suggesting:
> 1) create function takes java source and then calls gcj to compile it
> to native and build a .so from it that would get called at runtime?
> or
> 2) create function takes java source and just compiles to java .class
> files and the runtime invokes the gcj java interpreter.
> or I guess you could do both at the same time.
The impression I had (after not looking very closely) was that you could
expect to compile to bytecodes on the fly and then run the gcj
interpreter. But the .so alternative might be a good fallback if that
doesn't work.
> In either case I am concerned about licensing issues. gcj is not under
> a BSD style license. Depending on what you need you are either dealing
> with regular GPL, LGPL, or LGPL with a special java exception.
> I beleive (without giving it too much thought) that doing either 1 or 2
> above would end up linking GPL code into postgres. This can be worked
> around by requiring the the necessary gcj libraries be installed
> separately and detected at configure time (like is done elsewhere). But
> is does (I think) present a problem for commercial products that would
> like to redistribute postgres with pljava.
Good point, but unless you want to build a BSD-license Java
implementation, there will never be a pljava that doesn't have different
licensing restrictions than PG itself does. gcj is at least more free
than either Sun's or IBM's JVM ...
> Another challenge here it that the java code is going to want to use the
> jdbc api when communicating with the database.
Yes. I think we'd need a new implementation of jdbc that sits atop SPI
(invoked via jni I guess) rather than a FE/BE connection. How well
layered is our jdbc code --- would this mean a large rewrite, or just
rolling in a new bottom layer?
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly
From pgsql-hackers-owner+M31202@postgresql.org Thu Oct 31 21:18:38 2002
Return-path: <pgsql-hackers-owner+M31202@postgresql.org>
Received: from west.navpoint.com (west.navpoint.com [207.106.42.13])
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id gA12ILU00147
for <pgman@candle.pha.pa.us>; Thu, 31 Oct 2002 21:18:37 -0500 (EST)
Received: from postgresql.org (postgresql.org [64.49.215.8])
by west.navpoint.com (8.11.6/8.10.1) with ESMTP id g9VHv8h08054
for <pgman@candle.pha.pa.us>; Thu, 31 Oct 2002 12:57:08 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP
id 5CA844768F1; Thu, 31 Oct 2002 12:54:18 -0500 (EST)
Received: from postgresql.org (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with SMTP
id 973E1476060; Thu, 31 Oct 2002 12:54:11 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP id 9A45F47668B
for <pgsql-hackers@postgresql.org>; Thu, 31 Oct 2002 12:54:05 -0500 (EST)
Received: from mail.xythos.com (sdsl-216-36-77-241.dsl.sjc.megapath.net [216.36.77.241])
by postgresql.org (Postfix) with ESMTP id 0D7F5476684
for <pgsql-hackers@postgresql.org>; Thu, 31 Oct 2002 12:54:05 -0500 (EST)
Received: from ravms by mail.xythos.com with mail-ok (Exim 3.36 #3)
id 187JXx-0006Pc-00; Thu, 31 Oct 2002 17:55:57 +0000
Received: from sdsl-216-36-77-241.dsl.sjc.megapath.net ([216.36.77.241] helo=xythos.com)
by mail.xythos.com with asmtp (Exim 3.36 #3)
id 187JXx-0006PR-00; Thu, 31 Oct 2002 17:55:57 +0000
Message-ID: <3DC175F7.90901@xythos.com>
Date: Thu, 31 Oct 2002 10:27:03 -0800
From: Barry Lind <blind@xythos.com>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020826
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: Tom Lane <tgl@sss.pgh.pa.us>
cc: pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] PG functions in Java: maybe use gcj?
References: <819.1036006197@sss.pgh.pa.us> <3DC0AA42.4000205@xythos.com> <3715.1036037428@sss.pgh.pa.us>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
X-Envelope-To: tgl@sss.pgh.pa.us,
pgsql-hackers@postgreSQL.org
X-Virus-Scanned: by AMaViS new-20020517
Precedence: bulk
Sender: pgsql-hackers-owner@postgresql.org
X-Virus-Scanned: by AMaViS new-20020517
Status: OR
Tom Lane wrote:
> Barry Lind <blind@xythos.com> writes:
>
>>In either case I am concerned about licensing issues. gcj is not under
>>a BSD style license. Depending on what you need you are either dealing
>>with regular GPL, LGPL, or LGPL with a special java exception.
>>I beleive (without giving it too much thought) that doing either 1 or 2
>>above would end up linking GPL code into postgres. This can be worked
>>around by requiring the the necessary gcj libraries be installed
>>separately and detected at configure time (like is done elsewhere). But
>>is does (I think) present a problem for commercial products that would
>>like to redistribute postgres with pljava.
>
>
> Good point, but unless you want to build a BSD-license Java
> implementation, there will never be a pljava that doesn't have different
> licensing restrictions than PG itself does. gcj is at least more free
> than either Sun's or IBM's JVM ...
>
It depends on what you mean by more free. An architecture that
interacts with an external jvm would let you use any jvm (free ones as
well as others). From a licensing standpoint it is generally easy to
redistribute a jvm or expect the user to have one installed (most java
based products out there today do this).
However in the proposal here we are talking about requiring a specific
jvm (gcj) and actually linking parts of it into postgres. To the extent
that GPL code is linked in the GPL extends to the entire code base. As
I said previously there are ways to work around this, but it becomes
tricky. Especially when a commercial product wants to bundle postgres
and pljava. That resulting bundle is probably entirely under the GPL
and then any changes to it are also GPL. So it could be the case that
this company would be prevented from submitting improvements they made
back to the core product because their improvements are GPLed as a
result of pljava.
Now having said all that, I have been monitoring the progres of gcj for
some time because I think there are very interesting possibilities. And
I am all for anyone who wants to look into it further and investigate
the possiblities. I just want to raise the licensing issue because it
can cause problems and it is better to think about them up front than
after the fact.
>
>>Another challenge here it that the java code is going to want to use the
>>jdbc api when communicating with the database.
>
>
> Yes. I think we'd need a new implementation of jdbc that sits atop SPI
> (invoked via jni I guess) rather than a FE/BE connection. How well
> layered is our jdbc code --- would this mean a large rewrite, or just
> rolling in a new bottom layer?
>
It isn't as well layered as it could be, but it isn't too bad. Overall
it shouldn't be too much work, but not a little project either. One
area that isn't well layered is the assumption that the raw data from
the server is in text format, since that is what the FE/BE protocol
provides. So all the conversion functions that convert to/from java
datatypes do so in this format. This assumption runs deep into the
code. As a first pass it would be easiest to get raw data from SPI
convert to text and then convert to java datatypes instead of going
directly from the internal SPI format directly to java datatypes. This
could be improved upon later.
> regards, tom lane
>
thanks,
--Barry
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
From pgsql-hackers-owner+M31223@postgresql.org Fri Nov 1 07:34:24 2002
Return-path: <pgsql-hackers-owner+M31223@postgresql.org>
Received: from postgresql.org (postgresql.org [64.49.215.8])
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id gA1CYKU23527
for <pgman@candle.pha.pa.us>; Fri, 1 Nov 2002 07:34:21 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP
id C48C44762EE; Fri, 1 Nov 2002 07:34:13 -0500 (EST)
Received: from postgresql.org (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with SMTP
id 1F69C475F34; Fri, 1 Nov 2002 07:34:11 -0500 (EST)
Received: from localhost (postgresql.org [64.49.215.8])
by postgresql.org (Postfix) with ESMTP id 06581474E53
for <pgsql-hackers@postgresql.org>; Fri, 1 Nov 2002 07:34:07 -0500 (EST)
Received: from anchor-post-39.mail.demon.net (anchor-post-39.mail.demon.net [194.217.242.80])
by postgresql.org (Postfix) with ESMTP id 7D34D474E44
for <pgsql-hackers@postgresql.org>; Fri, 1 Nov 2002 07:34:06 -0500 (EST)
Received: from lfix.demon.co.uk ([158.152.59.127] helo=linda.lfix.co.uk)
by anchor-post-39.mail.demon.net with esmtp (Exim 3.36 #2)
id 187b04-0002Pj-0U
for pgsql-hackers@postgresql.org; Fri, 01 Nov 2002 12:34:08 +0000
Received: from localhost
([127.0.0.1] helo=localhost.localdomain ident=olly)
by linda.lfix.co.uk with esmtp (Exim 3.36 #1 (Debian))
id 187b04-0007zb-00
for <pgsql-hackers@postgresql.org>; Fri, 01 Nov 2002 12:34:08 +0000
Subject: Re: [HACKERS] PG functions in Java: maybe use gcj?
From: Oliver Elphick <olly@lfix.co.uk>
To: pgsql-hackers@postgresql.org
In-Reply-To: <3DC175F7.90901@xythos.com>
References: <819.1036006197@sss.pgh.pa.us> <3DC0AA42.4000205@xythos.com>
<3715.1036037428@sss.pgh.pa.us> <3DC175F7.90901@xythos.com>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.8
Date: 01 Nov 2002 12:34:08 +0000
Message-ID: <1036154048.7925.73.camel@linda>
MIME-Version: 1.0
X-Virus-Scanned: by AMaViS new-20020517
Precedence: bulk
Sender: pgsql-hackers-owner@postgresql.org
X-Virus-Scanned: by AMaViS new-20020517
Status: OR
On Thu, 2002-10-31 at 18:27, Barry Lind wrote:
> However in the proposal here we are talking about requiring a specific
> jvm (gcj) and actually linking parts of it into postgres. To the extent
> that GPL code is linked in the GPL extends to the entire code base. As
> I said previously there are ways to work around this, but it becomes
> tricky. Especially when a commercial product wants to bundle postgres
> and pljava. That resulting bundle is probably entirely under the GPL
> and then any changes to it are also GPL. So it could be the case that
> this company would be prevented from submitting improvements they made
> back to the core product because their improvements are GPLed as a
> result of pljava.
Nothing that company does can affect the licensing of PostgreSQL itself
- it doesn't belong to them, so they cannot change its licence.
Nothing in the GPL forces them to put GPL copyright on their own
alterations.
What they cannot do is to _distribute_ binary code that links to GPL
code while giving fewer rights to their distributees than they
themselves received with the GPL code, whether in respect of their own
code or the GPL code. Therefore they would be required to make their
source changes available to anyone to whom they gave a binary, and they
would not be able to restrict the further distribution of those
changes. They can contribute those changes to the project under
whatever licence they wish that is acceptable to the project.
Furthermore, gcj is part of the GNU compiler collection, like gcc, and
using it does not in itself cause code compiled under it to be subject
to the GPL. Linking to its runtime library would normally cause that,
but the gcj-3.0 copyright contains the following text:
========================================================================
The libgcj library is licensed under the terms of the GNU General
Public License, with this special exception:
As a special exception, if you link this library with other files
to produce an executable, this library does not by itself cause
the resulting executable to be covered by the GNU General Public
License. This exception does not however invalidate any other
reasons why the executable file might be covered by the GNU
General Public License.
========================================================================
--
Oliver Elphick Oliver.Elphick@lfix.co.uk
Isle of Wight, UK
http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C
========================================
"But they that wait upon the LORD shall renew their
strength; they shall mount up with wings as eagles;
they shall run, and not be weary; and they shall walk,
and not faint." Isaiah 40:31
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)