|
The security features of the Curl® language are similar to
Java™'s: strong typing, simple name-scoping, automatic
memory-management, and a sandbox to control access to host and network
resources. One big security difference is in the way the Curl
Runtime Environment analyzes and runs applets.
In Java, the applet-author compiles applets into bytecode, then the
user's JVM runs the applets by interpretation or native-code
compilation. Before the JVM runs the applet, though, the JVM analyzes
the applet's bytecode for security problems. The JVM uses complex
mechanisms for bytecode verification and class loading, so as to
ensure that the applet obeys Java's type-safe language security
rules. However, a hostile author can write his applets in Java
bytecode directly, in hope of bypassing Java's security mechanisms.
Researchers and hackers have found many bugs and security holes in
these complex JVM mechanisms.
A Curl applet or package is received by the Curl Runtime
Environment as either source code or as a .pcurl file. A .pcurl applet
is a non-text version of Curl source-code which retains all the
data-type information that was in the original, human-readable Curl
applet. Because both kinds of Curl code retain their variables'
data-types, the Curl compiler can always control very carefully the
process of translating typed source code to machine code. By
retaining all data-types in every applet, the Curl technology greatly
simplifies the process of ensuring correct behavior of the code.
Thus, your Curl Runtime Environment can easily, reliably, and fully
analyze each applet you download for security.
Another difference is that the Curl Runtime Environment runs each
Curl applet in a separate Curl process, so it
can easily keep different applets' activities and
resources separate. With Curl processes, the user can terminate
applets, and Curl can properly reclaim any resources the applets were
using. In contrast, Java's JVM runs Java applets as threads which
share the JVM's resources in one big pool. We believe Curl applet
processes are more robust than Java's threads.
The Curl Runtime Environment also imposes resource consumption limits
on Curl applets. Therefore, one applet cannot use up so many resources
that it interferes with other Curl applets or other programs on your
computer.
Finally, the Curl Runtime Environment allows access to network
resources like web sites and other network servers only if
those servers have been explicitly configured to allow those accesses.
This behavior allows a more general use of network resources than Java
(which only allows access to things from the server that the Java
applet was loaded from). At the same time, the Curl approach never
allows access to anything that the administrator of that server hasn't
explicitly authorized.
|