You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@couchdb.apache.org by "nickva (via GitHub)" <gi...@apache.org> on 2023/05/30 23:05:12 UTC

[GitHub] [couchdb] nickva opened a new pull request, #4627: Add QuickJS as a Javascript engine option

nickva opened a new pull request, #4627:
URL: https://github.com/apache/couchdb/pull/4627

   https://bellard.org/quickjs
   https://fuchsia.googlesource.com/third_party/quickjs/
   
   Some benefits over SM:
   
    * Small. We're using 6 or so C files vs 700+ SM91 C++ files.
   
    * Built with Apache CouchDB as opposed having to maintain a separate SM package, like for RHEL9, for instance, where they dropped support for SM already. (see https://github.com/apache/couchdb/issues/4154).
   
    * Embedding friendly. Designed from ground-up for embedding. SM has been updating the C++ API such that we have to keep copy-pasting new versions of our C++ code every year or so. (see https://github.com/apache/couchdb/pull/4305).
   
    * Easy to modify to accept Spidermonkey 1.8.5 top level functions for map/reduce code so we don't have have to parse the JS, AST transform it, and then re-compile it.
   
    * Configurable runtime feature set - can disable workers, promises and other API and features which may not work well in a backend JS environment. Some users may want more, some may want to disable even Date(time) features to hedge again Spectre-style attacks (spectreattack.com).
   
    * Allows granular time (reduction) tracking if we wanted to provide a runtime allowance for each function.
   
    * Better sandboxing. Creating a whole JSRuntime takes only 300 microseconds, so we can afford to do that on reset. JSRuntimes cannot share JS data or object between them.
   
    * Seems to be faster in preliminary benchmarking with small concurrent VDU and view builds: https://gist.github.com/nickva/ed239651114794ebb138b1f16c5f6758 Results seem promising: - 4x faster than SM 1.8.5 - 5x faster than SM 91 - 6x reduced memory usage per couchjs process (5MB vs 30MB)
   
    * Allows compiling JS bytecode ahead of time a C array of bytes.
   
   QuickJS can be built alongside Spidermonkey and toggled on/off at runtime:
   
   ```
   ./configure --dev --js-engine=quickjs
   ```
   
   This makes it the default engine. But Spidermonkey can still be set in the config option.
   
   ```
   [couchdb]
   js_engine = spidermonkey | quickjs
   ```
   
   Only tested on MacOS and Linux. All `make check` tests pass there.
   
   Issue: https://github.com/apache/couchdb/issues/4448
   
   ### Some basic benchmarking ###
   
   Summary: 
      - 3x faster than SM 1.8.5
      - 4x faster than SM 91
      - 6x reduced memory usage per couchjs process (5MB vs 30MB).
   
   **Setup Details**
   
   MacOS Intel, Erlang 24, ./dev/run -n1
   
   Benchmark script: https://gist.github.com/nickva/c0cbf6a556cc2dc7dd6ee79f504f5f84.
     -  20 concurrent workers create a db and:
        * Insert 100 docs, 10 ddoc(views) and query the views
        * Repeat that 3 times in a row
        
   Results measured by the zsh `time` command  as `% time ./stampede_dbs_ddocs_vdus.py ...`. CPU usage is reported for the client not the couchjs process or Erlang VM. Some example of resource usage is provided below as btop screenshots.
        
   **QuickJS**
   
   ```
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.10s user 0.22s system 7% cpu 18.754 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.05s user 0.21s system 6% cpu 18.438 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.06s user 0.21s system 6% cpu 18.591 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.06s user 0.20s system 6% cpu 18.279 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.09s user 0.22s system 6% cpu 18.822 total
   ```
   
   **Spidermonkey 1.8.5**
   
   ```
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.33s user 0.25s system 2% cpu 1:06.80 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.31s user 0.24s system 2% cpu 1:05.80 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.32s user 0.24s system 2% cpu 1:04.34 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.31s user 0.23s system 2% cpu 1:03.00 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.34s user 0.25s system 2% cpu 1:13.93 total
   ```
   
   **Spidermonkey 91**
   
   ```
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.11s user 0.21s system 1% cpu 1:31.13 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.09s user 0.20s system 1% cpu 1:24.22 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.10s user 0.21s system 1% cpu 1:35.53 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.06s user 0.20s system 1% cpu 1:20.57 total
   ./stampede_dbs_ddocs_vdus.py -x 10 -n 100 -w 20 -t 3  1.07s user 0.20s system 1% cpu 1:22.06 total
   ```
   
   Using btop locally with one Spidermonkey run and two QuickJS runs:
   
   <img width="1052" alt="240767354-aad22ad0-3e96-4aa8-a840-aa8e44288a16" src="https://github.com/apache/couchdb/assets/211822/c14bb3db-f9d7-4bda-b9c2-194ea26c59de">
   
   <img width="1059" alt="240767364-e9736666-5fee-4ade-b8bb-e8c1f22969b5" src="https://github.com/apache/couchdb/assets/211822/caf1dc5e-3bf0-4e77-a43b-ddd12717f67c">
   
   Memory usage 30-32MB RSS for Spidermonkey and 4-5MB for QuickJS. The time it took to run the benchmark can seen in the CPU usage graph.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [couchdb] nickva commented on pull request #4627: Add QuickJS as a Javascript engine option

Posted by "nickva (via GitHub)" <gi...@apache.org>.
nickva commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-1570576011

   A NIF would be easier to do if we didn't have the getRow/sendRow sub-protocol for list/show, where we have to call back into Erlang, wait for a row, then return back to Javascript. As a driver it's just simpler to do with print and readline.
   
   Even then, it might still make sense to retain external driver vs NIF duality, as it is possible to apply more restrictive isolation policies (seccomp, apparmor, selinux, etc) to the OS process. With all the `main.js` compiled in as bytecode to a C array, the OS process can even be blocked from opening files: it only gets to talk to outside via standard-in/out file descriptors it received on startup. That would be one of the tradeoffs - more isolation but lower speed.
   
   Rustler might improve the situation if there was a Rust-only JS engine which doesn't wrap a C or C++ one. Then, we could have a NIF and feel like we're not making as much of a safety vs speed tradeoff.  I've been keeping an eye on https://github.com/Starlight-JS/Starlight and https://github.com/boa-dev/boa. Boa one looks more promising.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Add QuickJS as a Javascript engine option [couchdb]

Posted by "big-r81 (via GitHub)" <gi...@apache.org>.
big-r81 commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-2089942205

   Hey Nick,
   
   thats really great work. I installed the MSYS2 choco package to the Win-CI and was able to compile CouchDB with QuickJS on Windows.
   
   We need an additional small change ([PR](https://github.com/apache/couchdb-glazier/pull/33)) in CouchDB Glazier that this works out-of-the-box. 
   
   ```
   ==> couch_quickjs (compile)
   make[1]: Entering directory '/c/Users/couchdb/Documents/couchdb/src/couch_quickjs/quickjs'
   mkdir -p .obj .obj/examples .obj/tests
   gcc -g -Wall -MMD -MF .obj/qjsc.o.d -Wno-array-bounds -Wno-format-truncation -fwrapv  -D_GNU_SOURCE -DCONFIG_VERSION=\"2024-02-14\" -DCONFIG_BIGNUM -DCONFIG_CC=\"gcc\" -DCONFIG_PREFIX=\"/usr/local\" -O2 -c -o .obj/qjsc.o qjsc.c
   gcc -g -Wall -MMD -MF .obj/quickjs.o.d -Wno-array-bounds -Wno-format-truncation -fwrapv  -D_GNU_SOURCE -DCONFIG_VERSION=\"2024-02-14\" -DCONFIG_BIGNUM -O2 -c -o .obj/quickjs.o quickjs.c
   gcc -g -Wall -MMD -MF .obj/libregexp.o.d -Wno-array-bounds -Wno-format-truncation -fwrapv  -D_GNU_SOURCE -DCONFIG_VERSION=\"2024-02-14\" -DCONFIG_BIGNUM -O2 -c -o .obj/libregexp.o libregexp.c
   gcc -g -Wall -MMD -MF .obj/libunicode.o.d -Wno-array-bounds -Wno-format-truncation -fwrapv  -D_GNU_SOURCE -DCONFIG_VERSION=\"2024-02-14\" -DCONFIG_BIGNUM -O2 -c -o .obj/libunicode.o libunicode.c
   gcc -g -Wall -MMD -MF .obj/cutils.o.d -Wno-array-bounds -Wno-format-truncation -fwrapv  -D_GNU_SOURCE -DCONFIG_VERSION=\"2024-02-14\" -DCONFIG_BIGNUM -O2 -c -o .obj/cutils.o cutils.c
   gcc -g -Wall -MMD -MF .obj/quickjs-libc.o.d -Wno-array-bounds -Wno-format-truncation -fwrapv  -D_GNU_SOURCE -DCONFIG_VERSION=\"2024-02-14\" -DCONFIG_BIGNUM -O2 -c -o .obj/quickjs-libc.o quickjs-libc.c
   gcc -g -Wall -MMD -MF .obj/libbf.o.d -Wno-array-bounds -Wno-format-truncation -fwrapv  -D_GNU_SOURCE -DCONFIG_VERSION=\"2024-02-14\" -DCONFIG_BIGNUM -O2 -c -o .obj/libbf.o libbf.c
   gcc -g -o qjsc .obj/qjsc.o .obj/quickjs.o .obj/libregexp.o .obj/libunicode.o .obj/cutils.o .obj/quickjs-libc.o .obj/libbf.o -lm -ldl -lpthread
   make[1]: Leaving directory '/c/Users/couchdb/Documents/couchdb/src/couch_quickjs/quickjs'
   Compiled src/couch_quickjs.erl
   c:/Users/couchdb/Documents/couchdb/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl:14:2: Warning: behaviour couch_scanner_plugin undefined
   Compiled src/couch_quickjs_scanner_plugin.erl
   Compiling quickjs/quickjs.c
   Compiling quickjs/libregexp.c
   Compiling quickjs/libunicode.c
   Compiling quickjs/cutils.c
   Compiling quickjs/libbf.c
   Compiling quickjs/quickjs-libc.c
   Compiling c_src/couchjs.c
   Compiling c_src/couchjs_mainjs_bytecode.c
   Compiling c_src/couchjs_coffee_bytecode.c
   ```
   
   Running the tests:
   ```
   ==> couch_quickjs (eunit)
   ======================== EUnit ========================
   module 'couch_quickjs_scanner_plugin'
     module 'couch_quickjs_scanner_plugin_tests'
       couch_quickjs_scanner_plugin_tests:24: -couch_quickjs_scanner_plugin_test_/0-fun-0- (t_basic)...[0.008 s] ok
       [done in 0.011 s]
     [done in 9.601 s]
   module 'couch_quickjs'
     module 'couch_quickjs_tests'
   =======================================================
     Test passed.
   Cover analysis: c:/Users/couchdb/Documents/couchdb/src/couch_quickjs/.eunit/index.html
   
   Code Coverage:
   couch_quickjs                :  77%
   couch_quickjs_scanner_plugin :   1%
   
   Total                        : 6%
   ==> rel (eunit)
   ==> couchdb (eunit)
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [couchdb] jiahuili430 commented on a diff in pull request #4627: Add QuickJS as a Javascript engine option

Posted by "jiahuili430 (via GitHub)" <gi...@apache.org>.
jiahuili430 commented on code in PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#discussion_r1221825609


##########
src/couch_quickjs/src/couch_quickjs.erl:
##########
@@ -0,0 +1,52 @@
+% Licensed under the Apache License, Version 2.0 (the "License"); you may not
+% use this file except in compliance with the License. You may obtain a copy of
+% the License at
+%
+%   http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+% License for the specific language governing permissions and limitations under
+% the License.
+
+% Reads CouchDB's ini file and gets queried for configuration parameters.
+% This module is initialized with a list of ini files that it consecutively
+% reads Key/Value pairs from and saves them in an ets table. If more an one
+% ini file is specified, the last one is used to write changes that are made
+% with store/2 back to that ini file.
+
+-module(couch_quickjs).
+
+-export([
+    mainjs_cmd/0,
+    coffee_cmd/0
+]).
+
+mainjs_cmd() ->
+    Path = filename:join([priv_dir(), "couchjs_mainjs"]),
+    check_path(Path),
+    apply_config(Path).
+
+coffee_cmd() ->
+    Path = filename:join([priv_dir(), "couchjs_coffee"]),
+    check_path(Path),
+    apply_config(Path).
+
+priv_dir() ->
+    case code:priv_dir(couch_quickjs) of
+        {error, bad_name} -> error({?MODULE, app_dir_not_found});
+        Dir when is_list(Dir) -> Dir
+    end.
+
+check_path(Path) ->
+    case filelib:is_file(Path) of
+        true -> ok;
+        false -> error({?MODULE, {missing, Path}})
+    end.
+
+apply_config(Path) ->
+    case config:get("quickjs", "memory_limit_bytes") of

Review Comment:
   Do we need a default setting here?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Add QuickJS as a Javascript engine option [couchdb]

Posted by "nickva (via GitHub)" <gi...@apache.org>.
nickva commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-1972150681

   Some progress update:
   
    * Updated QuickJS with the latest from upstream. We carried a few patches (a CVE patch, FreeBSD compat, and some others). All those have been merged upstream now. We only have our simple Spidermonkey 1.8.5 compat patch.
   
    * For compatibility, added `javascript_quickjs` and `javascript_spidermonkey` language variants. This is to allow testing individual views using QuickJS even if the default is kept as Spidermonkey. Or after switching the default to QuickJS, to keep some views using Spidermonkey as a temporary measure.
   
    * As discussed during one of the CouchDB meetings, implemented a scanner application to help users scan their cluster automatically for QuickJS compatibility. There is a scanner API and a plugins. So far only implemented the QuickJS compat plugin, but other plugins are possible: ddoc feature detection, finding tags or fields in ddocs, etc. The QuickJS plugin, when enabled, will trawl through all the dbs, shards and ddocs and try to compile them with both QuickJS and Spidermonkey. If results differ it will report it in the logs as a warning. 
   
   TODO: 
    * The idea so to add some doc sampling and actually some docs to the view functions.
    *  Write some tests for scanner app


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [couchdb] nickva commented on pull request #4627: Add QuickJS as a Javascript engine option

Posted by "nickva (via GitHub)" <gi...@apache.org>.
nickva commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-1569309483

   <img width="778" alt="Screen Shot 2023-05-30 at 8 13 16 PM" src="https://github.com/apache/couchdb/assets/211822/2eedb2f9-e49f-4536-984a-ff1e93607294">
   
   Added QuickJS CI job variants which test each Erlang version alongside Spidermonkey. All have nouveau enabled as well.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Add QuickJS as a Javascript engine option [couchdb]

Posted by "nickva (via GitHub)" <gi...@apache.org>.
nickva commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-2019336436

   Another update:
   
     * The scanner app moved to it's own PR https://github.com/apache/couchdb/pull/5014. With a sample plugin to detect CouchDB 4.x planned deprecated ddoc features.
     
     * As requested by a CouchDB user, added the ability to not build with Spidermonkey (completely disable Spidermonkey).


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Add QuickJS as a Javascript engine option [couchdb]

Posted by "nickva (via GitHub)" <gi...@apache.org>.
nickva commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-2089141941

   After another update ready for review:
      * Added Windows support using MSYS2 glazier [PR](https://github.com/apache/couchdb-glazier/pull/32)
      * A [Scanner](https://github.com/apache/couchdb/pull/5014) plugin.
      * Documentation
      * CI jobs with QuickJS as the default


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [couchdb] rnewson commented on pull request #4627: Add QuickJS as a Javascript engine option

Posted by "rnewson (via GitHub)" <gi...@apache.org>.
rnewson commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-1570635767

   fair enough.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [couchdb] rnewson commented on pull request #4627: Add QuickJS as a Javascript engine option

Posted by "rnewson (via GitHub)" <gi...@apache.org>.
rnewson commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-1570534987

   looks really good. what would a NIF look like? I mentioned elsewhere that [rustler](https://github.com/rusterlium/rustler) would be a nice way to do that safely. I think you said 100% NIF is conditional on dropping _list/_show support?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Add QuickJS as a Javascript engine option [couchdb]

Posted by "nickva (via GitHub)" <gi...@apache.org>.
nickva commented on PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#issuecomment-2090674505

   Thanks for checking, Ronny!
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Add QuickJS as a Javascript engine option [couchdb]

Posted by "nickva (via GitHub)" <gi...@apache.org>.
nickva commented on code in PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#discussion_r1538552664


##########
configure:
##########
@@ -298,7 +318,7 @@ if [ "${ARCH}" = "aarch64" ] && [ "${SM_VSN}" = "60" ]; then
   exit 1
 fi
 
-if [ "${ERLANG_OS}" = "unix" ]; then
+if [ "${JS_ENGINE}" = "spidermonkey" ] && [ "${ERLANG_OS}" = "unix" ]; then

Review Comment:
   This should be fixed in the last update. If spidermonkey is enabled, we should run the library/header checks.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Add QuickJS as a Javascript engine option [couchdb]

Posted by "pgj (via GitHub)" <gi...@apache.org>.
pgj commented on code in PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#discussion_r1521395723


##########
configure:
##########
@@ -298,7 +318,7 @@ if [ "${ARCH}" = "aarch64" ] && [ "${SM_VSN}" = "60" ]; then
   exit 1
 fi
 
-if [ "${ERLANG_OS}" = "unix" ]; then
+if [ "${JS_ENGINE}" = "spidermonkey" ] && [ "${ERLANG_OS}" = "unix" ]; then

Review Comment:
   This check should not be skipped unless support for SpiderMonkey is completely disabled.  That is, this part has to be modified in lockstep with the part that is responsible for building SM.  If that is not deactivated, this should not be either.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Add QuickJS as a Javascript engine option [couchdb]

Posted by "nickva (via GitHub)" <gi...@apache.org>.
nickva commented on code in PR #4627:
URL: https://github.com/apache/couchdb/pull/4627#discussion_r1521549968


##########
configure:
##########
@@ -298,7 +318,7 @@ if [ "${ARCH}" = "aarch64" ] && [ "${SM_VSN}" = "60" ]; then
   exit 1
 fi
 
-if [ "${ERLANG_OS}" = "unix" ]; then
+if [ "${JS_ENGINE}" = "spidermonkey" ] && [ "${ERLANG_OS}" = "unix" ]; then

Review Comment:
   You're right. Good find! I'll fix it



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@couchdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org