Raymond created CAMEL-24337:
-------------------------------

             Summary: Support Python 3
                 Key: CAMEL-24337
                 URL: https://issues.apache.org/jira/browse/CAMEL-24337
             Project: Camel
          Issue Type: New Feature
    Affects Versions: 4.21.0
            Reporter: Raymond


As based on [this Zulip 
topic|https://camel.zulipchat.com/#narrow/channel/257298-camel/topic/Modernize.20camel-python.20with.20GraalPy.20for.20Python.203.20Support/with/614304103]

*Modernize camel-python with GraalPy for Python 3 Support*

The current {{camel-python}} component is based on Jython, which restricts 
execution strictly to Python 2.7. Given that Python 2 reached end-of-life years 
ago, this component is increasingly difficult to use in modern environments.

A similar situation occurred with {{camel-javascript}} when Rhino and Nashorn 
were phased out. That component was successfully updated to leverage GraalVM's 
JavaScript engine ({{{}org.graalvm.js{}}}).

GraalVM now offers *GraalPy* ({{{}org.graalvm.python:python-language{}}}), a 
full Python 3 runtime for the JVM built on Truffle.

*Rationale*
 * *Python 3 Compatibility:* Allows Camel users to execute modern Python 3 
syntax and standard libraries within routes.

 * *Consistency Across Scripting Components:* Standardizes Camel's polyglot 
ecosystem around GraalVM engines alongside {{{}camel-javascript{}}}.

 * *Polyglot Interoperability:* Uses {{org.graalvm.polyglot.Context}} to pass 
{{Exchange}} bodies, headers, and properties directly between Java and Python.

 * *Sandboxing:* GraalVM allows a [Sandboxing 
policy.|https://camel.zulipchat.com/#narrow/channel/257298-camel/topic/Modernize.20camel-python.20with.20GraalPy.20for.20Python.203.20Support/with/614304103]
 

h3. Implementation

Update or replace the underlying execution engine of {{camel-python}} to use 
the GraalVM Polyglot API ({{{}org.graalvm.polyglot.Context{}}}) rather than the 
legacy {{javax.script}} JSR-223 / Jython implementation.

I was just running Python on Graal (independently of Camel), and then thought 
might be something to look into for Camel as well.

*Relevant Links*

[https://www.graalvm.org/jdk24/reference-manual/python/]
[https://mvnrepository.com/artifact/org.graalvm.python]
[https://www.graalvm.org/latest/security-guide/sandboxing/]

*Sandboxing*

As Python is really powerful it can also be vulnrable, especially when 
third-parties use it. GraalVM (Through the truffleVM) allows a SandboxPolicy:
 * Trusted
 * Constrained
 * Isolated
 * Untrusted

 

*Note*
A downside of GraalPy, contrary to GraalJS is that it's relative big. The main 
dependency:

[https://mvnrepository.com/artifact/org.graalvm.python/python]

Contains both python language runtime (90 mb), standard library (13 mb), and 
trufflevm (1 mb). I guess that's what most would like, but it maybe good to 
notify this in the documentation.

It's around double that of the current Python based on Jython (which is around 
50 mb)

*Note 2*
Another thing to consider if this will replace the current camel-python, or 
create a new one camel-python3. I don't use the current component especially 
because it's based on Python 2, but this maybe relevant to current users (to at 
least be clear in the documentation about it).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to