Bus Error on OS X with rjb, irb and dl

artone$B$G$9!#e(B

OS
Xe$B$G!"e(Brjbe$B$re(Birbe$B$rMxMQ$7$FF0$+$9$He(BBuge$B$K$J$k$H$$$&%l%]!<%H$,Mh$?$N$G;n$7e(B
e$B$?$H$3$m!"3N<B$K:F8=$9$k$h$&$G$9!Je(Bruby-1.8.4 e$B%j%j!<%9HG!K!#e(B
e$B$^$C$?$/8+Ev$,$D$+$J$$$N$G=u$1$F$/[email protected]$5$$!#e(B

e$B%*%j%8%J%k$NJs9p<T$N%l%]!<%H$O0J2<$G$9!#e(B
e$B%9%/%j%W%H!'e(Brjb_irb.rb
require ‘rubygems’
require ‘rjb’

Rjb::load(nil, [])

e$B<B9T;~$N=PNO!'e(B
$ irb -r bin/rjb_irb.rb
./bin/rjb_irb.rb:9: [BUG] Bus Error
ruby 1.8.4 (2005-12-24) [powerpc-darwin8.4.0]

Abort trap

e$B0J2<!";d$N4D6-$G:F8=$7$?MM;R$G$9!#e(B
pbk-15:~/test arton$ irb -rrjb_irb.rb
./rjb_irb.rb:5: [BUG] Bus Error
dl:/System/Library/Frameworks/JavaVM.framework/Libraries/libjvm_compat.dylib,
9
ruby 1.8.4 (2005-12-24) [powerpc-darwin8.6.0]

Abort trap

dl:/System/Library/Frameworks/JavaVM.framework/Libraries/libjvm_compat.dylib,
9
e$B$O!“e(Bdle$B$Ne(Bhanlde.ce$B$K%Q%C%A$7$Fe(Bdlopene$B$KM?$($F$$$k0z?t$r=PNO$5$;$?$b$N$G!”:Ge(B
[email protected]$7$$%Q%9$r<($7$F$$$^$9!#e(B2e$BHVL$N0z?t$bLdBj$J$$$H;W$$$^$9!#e(B
e$B$H$$$&$h$j$b!"e(Birbe$BH4$-$N>l9g$Oe(Brjbe$B$He([email protected]$7$/F0$$$F$$$k$h$&$K$_$($^$9!#$7e(B
e$B$?$,$C$F!"e(Bdle$B$NLdBj$H$$$&$h$j$O!"e(Birbe$B$H$N9g$o$;5;$+$De(BOS
Xe$B8GM-!J$H$$$&$N$O!“e(B
Linux
2.4.21e$B$N4D6-$G$O:F8=$7$J$$$N$G!K$G2?$+$,$”$k$N$G$O$J$$$+$H;W$$$^$9!#e(B
e$B$J$*!“4X78$”$k$+$I$&$+$O$o$+$j$^$;$s$,!"e(Brjbe$B$Oe(BRubyGemse$B7PM3$G%m!<%I$5$l$Fe(B
e$B$$$^$9!#e(B

e$B$3$N$H$-$N%P%C%/%H%l!<%9$O0J2<$N$H$*$j$G$9!#e(B

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x90131a80 in memcmp ()
(gdb) bt
#0 0x90131a80 in memcmp ()
#1 0x907f180c in __CFInitialize ()
#2 0x9083653c in __CFSetupFoundationBridging ()
#3 0x929af4f4 in _NSToDoAtProcessStart ()
#4 0x9291fa60 in _NSInitializePlatform ()
#5 0x90a3f548 in call_class_loads ()
#6 0x90a3f45c in call_load_methods ()
#7 0x90a3a2c8 in map_images ()
#8 0x8fe0f6e0 in
__dyld__ZN16ImageLoaderMachO14doNotificationE15dyld_image_modejPK15dyld_image_info
()
#9 0x8fe033f8 in
__dyld__ZN4dyld12notifyAddingERSt6vectorIP11ImageLoaderSaIS2_EE ()
#10 0x8fe0ddb4 in
__dyld__ZN11ImageLoader4linkERKNS_11LinkContextENS_15BindingLazinessENS_18InitializerRunningEj
()
#11 0x8fe03ea4 in
__dyld__ZN4dyld4linkEP11ImageLoaderNS0_15BindingLazinessENS0_18InitializerRunningE
()
#12 0x8fe09c4c in __dyld_dlopen ()
#13 0x90031014 in dlopen ()
#14 0x0070dd90 in rb_dlhandle_initialize (argc=0, argv=0x9086e410,
self=3775556) at handle.c:66
#15 0x00011af8 in rb_call0 (klass=3777136, recv=3775556, id=2953,
oid=2953, argc=1, argv=0xbfff9770, body=0x39a130, flags=2) at
eval.c:5692
#16 0x000124fc in rb_call (klass=3777136, recv=3775556, mid=2953,
argc=1, argv=0xbfff9770, scope=1) at eval.c:5920
#17 0x00012e84 in rb_obj_call_init (obj=3775556, argc=1,
argv=0xbfff9770) at eval.c:7401
#18 0x0003dbf0 in rb_class_new_instance (argc=1, argv=0xbfff9770,
klass=0) at object.c:1607
#19 0x00011af8 in rb_call0 (klass=3782616, recv=3783256, id=24737,
oid=24737, argc=1, argv=0xbfff9770, body=0x39b7c4, flags=0) at
eval.c:5692
#20 0x000124fc in rb_call (klass=3782616, recv=3783256, mid=24737,
argc=1, argv=0xbfff9770, scope=1) at eval.c:5920
#21 0x000131ac in vafuncall (recv=2415924240, mid=0, n=4, ar=0x2) at
eval.c:5997
#22 0x0001330c in rb_funcall (recv=0, mid=2424759312, n=0) at
eval.c:6014
#23 0x005a9ce8 in load_jvm (jvmtype=0x0) at load.c:108
#24 0x005aa00c in create_jvm (pjenv=0xbfff99b8, vm_args=0xbfff99c4,
userpath=0x5b1b18 “.”, argv=4) at load.c:194
#25 0x005ad03c in rjb_s_load (argc=0, argv=0x9086e410, self=0) at
rjb.c:1540
#26 0x00011af8 in rb_call0 (klass=3785816, recv=3785876, id=9241,
oid=9241, argc=0, argv=0x0, body=0x39c444, flags=0) at eval.c:5692
#27 0x000124fc in rb_call (klass=3785816, recv=3785876, mid=9241,
argc=0, argv=0x0, scope=0) at eval.c:5920
#28 0x0000f6e4 in rb_eval (self=1960296, n=0x9086e410) at eval.c:3381
#29 0x00019530 in rb_load (fname=3177628, wrap=0) at eval.c:6715
#30 0x00019bf8 in rb_require_safe (fname=3177788, safe=0) at eval.c:7035
#31 0x00011af8 in rb_call0 (klass=1965196, recv=1816296, id=9249,
oid=9249, argc=1, argv=0xbfffb1d0, body=0x1d0f98, flags=2) at
eval.c:5692
#32 0x000124fc in rb_call (klass=1965196, recv=1816296, mid=9249,
argc=1, argv=0xbfffb1d0, scope=1) at eval.c:5920
#33 0x0000f918 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3396
#34 0x0000ee18 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3196
#35 0x0000cf08 in rb_yield_0 (val=3178928, self=1816296, klass=0,
flags=0, avalue=0) at eval.c:4897
#36 0x000228d8 in rb_ary_each (ary=3185188) at array.c:1128
#37 0x00011af8 in rb_call0 (klass=1936776, recv=3185188, id=3841,
oid=3841, argc=0, argv=0x0, body=0x1d8964, flags=0) at eval.c:5692
#38 0x000124fc in rb_call (klass=1936776, recv=3185188, mid=3841,
argc=0, argv=0x0, scope=0) at eval.c:5920
#39 0x0000ea74 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3120
#40 0x00012038 in rb_call0 (klass=11033, recv=74472, id=3221214944,
oid=0, argc=75004, argv=0x0, body=0xbfffdaa0, flags=0) at eval.c:5826
#41 0x000124fc in rb_call (klass=1816216, recv=1816296, mid=11033,
argc=0, argv=0x0, scope=0) at eval.c:5920
#42 0x0000f6e4 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3381
#43 0x00012038 in rb_call0 (klass=9969, recv=74472, id=3221217920,
oid=0, argc=75004, argv=0xbfa1fff4, body=0x0, flags=-1073749308) at
eval.c:5826
#44 0x000124fc in rb_call (klass=1816216, recv=1816296, mid=9969,
argc=1, argv=0xbfffe2c0, scope=0) at eval.c:5920
#45 0x0000f6e4 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3381
#46 0x00012038 in rb_call0 (klass=1, recv=3186348, id=1816296, oid=0,
argc=5041, argv=0x122e8, body=0xbfffee30, flags=-1073746316) at
eval.c:5826
#47 0x000124fc in rb_call (klass=1816216, recv=1816296, mid=5041,
argc=1, argv=0xbfffee70, scope=0) at eval.c:5920
#48 0x0000f6e4 in rb_eval (self=1960296, n=0x9086e410) at eval.c:3381
#49 0x00017f24 in ruby_exec_internal () at eval.c:1543
#50 0x00017f6c in ruby_exec () at eval.c:1563
#51 0x0001ad44 in ruby_run () at eval.c:1573
#52 0x000027f0 in main (argc=3, argv=0xbffffabc, envp=0x0) at main.c:46
(gdb)

e$B2?$+;n$7$?$[$&$,NI$$$3$H$J$I$"$j$^$7$?$i!"$3$A$i$G;n$7$^$9$N$G65$($F$/[email protected](B
e$B$5$$!#e(B
e$B$=$l$G$O!#e(B


arton [email protected]

e$BLZB<$H$$$$$^$9!#e(B

[ruby-dev:29113]e$B$HF1$88=>][email protected]$H;W$$$^$9!#e(Bbladee$B$,8+$i$l$J$$$N$G3NG’$G$-$Fe(B
e$B$J$$$N$G$9$,!“e(B[ruby-talk:142806]e$B$G$bF1$8$h$&$J8=>]$,$”$j$^$7$?!#3:Ev$Ne(B
e$B%9%l%C%ICf$G!“e(BApplee$B$X%P%0%l%]!<%H$rAw$C$?$H$NJs9p$,$”$j$^$9!#e(B

e$B0J2<$GF1MM$N8=>]$,:F8=$G$-$k$H;W$$$^$9!#e(B
% ruby -e ‘$0 = “foo”; require “e$BLdBj$N%i%$%V%i%je(B”’

artone$B$G$9!#e(B

[ruby-dev:29113]e$B$HF1$88=>][email protected]$H;W$$$^$9!#e(Bbladee$B$,8+$i$l$J$$$N$G3NG’$G$-$Fe(B
e$B$J$$$N$G$9$,!“e(B[ruby-talk:142806]e$B$G$bF1$8$h$&$J8=>]$,$”$j$^$7$?!#3:Ev$Ne(B
e$B%9%l%C%ICf$G!“e(BApplee$B$X%P%0%l%]!<%H$rAw$C$?$H$NJs9p$,$”$j$^$9!#e(B

e$B0J2<$GF1MM$N8=>]$,:F8=$G$-$k$H;W$$$^$9!#e(B
% ruby -e ‘$0 = “foo”; require “e$BLdBj$N%i%$%V%i%je(B”’
e$B$465<($"$j$,$H$&$4$6$$$^$9!#e(B
e$B0J2<$N%9%/%j%W%H$G:F8=$G$-$^$7$?!#e(B
ruby -rubygems -e ‘$0 = “foo”; require ‘rjb’; Rjb::load’
e$B$7$+$7!"$H$$$&$3$H$O!“e(B[ruby-dev:29113]e$B!J$3$l$Oe(Blibedite$B$NLdBj$H$$$&[email protected]$Ge(B
e$B$9!K$H$O0[$J$k$h$&$G$9!#e(B
Bladee$B$,I|5”$7$?$ie(Bruby-talk:142806 e$B$N$[$&$r8+$F$_$^$9!#e(B


arton [email protected]

[email protected]$G$9!#e(B

At Sat, 12 Aug 2006 02:26:59 +0900,
arton wrote in [ruby-dev:29260]:

e$B0J2<$N%9%/%j%W%H$G:F8=$G$-$^$7$?!#e(B
ruby -rubygems -e ‘$0 = “foo”; require ‘rjb’; Rjb::load’
e$B$7$+$7!"$H$$$&$3$H$O!“e(B[ruby-dev:29113]e$B!J$3$l$Oe(Blibedite$B$NLdBj$H$$$&[email protected]$Ge(B
e$B$9!K$H$O0[$J$k$h$&$G$9!#e(B
Bladee$B$,I|5”$7$?$ie(Bruby-talk:142806 e$B$N$[$&$r8+$F$_$^$9!#e(B

$0e$B$X$NBeF~$,$^$:$$$s$G$7$g$&$+!#e(B

Index: ruby.c

RCS file: /cvs/ruby/src/ruby/ruby.c,v
retrieving revision 1.83.2.13
diff -p -U 2 -r1.83.2.13 ruby.c
— ruby.c 1 Feb 2006 13:27:47 -0000 1.83.2.13
+++ ruby.c 12 Aug 2006 00:38:06 -0000
@@ -972,10 +972,15 @@ VALUE rb_argv;
VALUE rb_argv0;

+#if defined(_WIN32) || defined(MacOS_X)
+#define NO_PROCTITLE 1
+#endif
+
+#ifndef NO_PROCTITLE
#if defined(PSTAT_SETCMD) || defined(HAVE_SETPROCTITLE)
-#elif defined(_WIN32)
#elif defined(HAVE_SETENV) && defined(HAVE_UNSETENV)
#else
#define USE_ENVSPACE_FOR_ARG0
#endif
+#endif

#ifdef USE_ENVSPACE_FOR_ARG0
@@ -1006,4 +1011,7 @@ set_arg0space()
#endif

+#ifdef NO_PROCTITLE
+#define set_arg0 0
+#else
static void
set_arg0(val, id)
@@ -1081,4 +1089,5 @@ set_arg0(val, id)
#endif
}
+#endif

void

artone$B$G$9!#e(B

$0e$B$X$NBeF~$,$^$:$$$s$G$7$g$&$+!#e(B
e$B%Q%C%A$r$?$a$7$F$_$^$7$?!#e(B
1.8.5-preview3e$B$G!"$=$N$^$^$G$O8=>]$,:F8=$7!"%Q%C%AE,MQ8e$K2r7h$9$k$3$H$re(B
e$B3NG’$7$^$7$?!#e(B
[email protected]$7!"$3$A$i$N4D6-!Je(BOS X 10.4.7 PPC G4
e$B$H$$$&$+2?$r8+$l$P$$$$$N$+$J!)!Ke(B
e$B$G$O!“e([email protected]$C$?$N$Ge(B
-#if defined(_WIN32) || defined(MacOS_X)
+#if defined(_WIN32) || defined(APPLE) && defined(MACH)
e$B$H$7$^$7$?!#e(B
e$B$h$m$7$1$l$P!”$3$N%Q%C%[email protected]$7>[email protected]$,B?J,I,MW!=!2e(BMacOS_X__e$B$,Dj5A$5e(B
e$B$l$k$N$,@5$7$$$N$+$I$&$+H=CG$,$D$-$+$M$k$N$G!"e(BOS
Xe$B$K>$7$$J}$,%A%’%C%/$7e(B
e$B$F$/[email protected]$5$k$H=u$+$j$^$9!K$re(B1.8.5e$B$K<[email protected]$1$l$P9,$$$G$9!#4V$K9ge(B
e$B$o$J$$$+$J$!!#e(B


arton [email protected]

artone$B$G$9!#e(B

e$B:#$N$H$3$m!"e(B$0e$B$KBeF~$5$l$?J8;zNs$re(Bargv[0]e$B$K%;%C%H$7$?8e$Ge(Bargve$B$Ne(B
e$B;D$j$Oe(BNULLe$B$G$&$a$F$$$^$9!#$b$7$+$7$?$i!"e(Bmemcmp()e$B$KEO$5$l$F$$$ke(B
e$B$N$O$3$l$+$b$7$l$^$;$s!#e(B
e$B$J$k$[$I!“3N$+$K$=$l$O$”$j$=$&$G$9!#e(B

e$B0J2<$N%Q%C%A$b;n$7$F$_$F$b$i$($^$9$+!#e(B
e$B3NG’$7$^$7$?!#$3$A$i$N%Q%C%A$bM-8z$G!"e(Birbe$B$rMxMQ$7$?%Q%?!<%s!"e(B$0e$B$KD>@\Bee(B
e$BF~$9$k%Q%?!<%s$NN>J}$H$bLdBj$J$/F0:n$7$^$7$?!#e(B
[email protected]!“5?Ld$b$”$C$F!"e(B
irb -rhoge.rb
e$B$G!"e(Bhoge.rbe$BFb$Ge(Brubygemse$B!"e(Brjbe$B!"e(Brjbe$B$N%a%=%C%I7PM3$Ge(Bjvme$B$N%m!<e(B
e$B%I$G$Oe(Bmemcmp 0e$B$K$J$k$N$K!"e(Birbe$BC1FH$G5/F0$7$F$+$ie(Brequire
‘hoge.rb’ e$B$H$9$ke(B
e$B$H$J$<LdBj$J$$$N$+$,2r$;$^$;$s!#e(B
e$B$$$:$l$N>l9g$b!"e([email protected],$Ge(B$0e$B$KBP$9$kBeF~$O9T$C$F$$$k$N$G>r7o$OF1e(B
e$B$8$h$&$K;W$($k$N$G$9$,!#e(B


arton [email protected]

[email protected]$G$9!#e(B

At Sat, 12 Aug 2006 20:19:27 +0900,
arton wrote in [ruby-dev:29262]:

$0e$B$X$NBeF~$,$^$:$$$s$G$7$g$&$+!#e(B
e$B%Q%C%A$r$?$a$7$F$_$^$7$?!#e(B
1.8.5-preview3e$B$G!"$=$N$^$^$G$O8=>]$,:F8=$7!"%Q%C%AE,MQ8e$K2r7h$9$k$3$H$re(B
e$B3NG’$7$^$7$?!#e(B

e$B$=$N8e$b$&$R$H$D;W$$IU$$$?$3$H$,$"$j$^$9!#e(B

e$B:#$N$H$3$m!"e(B$0e$B$KBeF~$5$l$?J8;zNs$re(Bargv[0]e$B$K%;%C%H$7$?8e$Ge(Bargve$B$Ne(B
e$B;D$j$Oe(BNULLe$B$G$&$a$F$$$^$9!#$b$7$+$7$?$i!"e(Bmemcmp()e$B$KEO$5$l$F$$$ke(B
e$B$N$O$3$l$+$b$7$l$^$;$s!#e(B

e$B0J2<$N%Q%C%A$b;n$7$F$_$F$b$i$($^$9$+!#e(B

[email protected]$7!"$3$A$i$N4D6-!Je(BOS X 10.4.7 PPC G4 e$B$H$$$&$+2?$r8+$l$P$$$$$N$+$J!)!Ke(B
e$B$G$O!"e(B__[email protected]$C$?$N$Ge(B
-#if defined(_WIN32) || defined(MacOS_X)
+#if defined(_WIN32) || defined(APPLE) && defined(MACH)
e$B$H$7$^$7$?!#e(B

e$B$9$$$^$;$s!"$3$l$O4V0c$$$G$7$?!#e(B__MacOS_X__e$B$H$$$&$N$Oe(Bprocess.c
e$B$G;H$C$F$$$k%^%/%m$J$s$G$9$,!"<!$N$h$&$K<+A0$GDj5A$7$F$$$k$b$Ne(B
e$B$G$7$?!#$G$9$+$i!"e(B__APPLE__&__MACH__e$B$H$$$&>[email protected]$7$$$O$:$G$9!#e(B

#if defined(APPLE) && ( defined(MACH) || defined(DARWIN) )
&& !defined(MacOS_X)
#define MacOS_X 1
#endif

  • ruby.c (set_arg0): fill argv other than the first with an empty
    string instead of NULL.

Index: ruby.c

RCS file: /cvs/ruby/src/ruby/ruby.c,v
retrieving revision 1.83.2.13
diff -p -U 2 -r1.83.2.13 ruby.c
— ruby.c 1 Feb 2006 13:27:47 -0000 1.83.2.13
+++ ruby.c 12 Aug 2006 13:22:53 -0000
@@ -1066,16 +1066,11 @@ set_arg0(val, id)
if (i >= len) {
i = len;

  • memcpy(origargv[0], s, i);
  • origargv[0][i] = ‘\0’;
  • }
  • else {
  • memcpy(origargv[0], s, i);
  • s = origargv[0]+i;
  • *s++ = ‘\0’;
  • while (++i < len)
  •   *s++ = ' ';
    
  • for (i = 1; i < origargc; i++)
  •   origargv[i] = 0;
    
    }
  • memcpy(origargv[0], s, i);
  • s = origargv[0] + i;
  • *s = ‘\0’;
  • if (++i < len) memset(s + 1, ’ ', len - i);
  • for (i = 1; i < origargc; i++)
  • origargv[i] = s;
    rb_progname = rb_tainted_str_new2(origargv[0]);
    #endif

artone$B$G$9!#e(B

[email protected]!“5?Ld$b$”$C$F!"e(B
irb -rhoge.rb e$B$G!"e(Bhoge.rbe$BFb$Ge(Brubygemse$B!"e(Brjbe$B!"e(Brjbe$B$N%a%=%C%I7PM3$Ge(Bjvme$B$N%m!<e(B
e$B%I$G$Oe(Bmemcmp 0e$B$K$J$k$N$K!"e(Birbe$BC1FH$G5/F0$7$F$+$ie(Brequire ‘hoge.rb’ e$B$H$9$ke(B
e$B$H$J$<LdBj$J$$$N$+$,2r$;$^$;$s!#e(B

[email protected]$H$b$H$b$He(Bargce$B$,e(B2e$B$J$N$KBP$7$F!“e(B-rhoge.rbe$B$,2C$o$l$Pe(B3e$B$Ke(B
e$B$J$k$O$:$G$9$,!”$=$l$,4X78$7$F$$$k$N$+$b$7$l$^$;$s!#e(B
e$B$J$k$[$I!#e(Bruby -e ‘$0 = …’ e$B$N>l9g$bF1MM$G$9$M!#e(B


arton [email protected]

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:29262] Re: Bus Error on OS X with rjb, irb and
dl”
on Sat, 12 Aug 2006 20:19:27 +0900, arton [email protected]
writes:

|> $0e$B$X$NBeF~$,$^$:$$$s$G$7$g$&$+!#e(B
|e$B%Q%C%A$r$?$a$7$F$_$^$7$?!#e(B
|1.8.5-preview3e$B$G!"$=$N$^$^$G$O8=>]$,:F8=$7!"%Q%C%AE,MQ8e$K2r7h$9$k$3$H$re(B
|e$B3NG’$7$^$7$?!#e(B

e$B$3$N7o$r2r>C$G$-$k%Q%C%A$r%3%_%C%[email protected]$1$^$;$s$+!)e(B

[email protected]$G$9!#e(B

At Sun, 13 Aug 2006 01:18:45 +0900,
arton wrote in [ruby-dev:29265]:

[email protected]!“5?Ld$b$”$C$F!"e(B
irb -rhoge.rb e$B$G!"e(Bhoge.rbe$BFb$Ge(Brubygemse$B!"e(Brjbe$B!"e(Brjbe$B$N%a%=%C%I7PM3$Ge(Bjvme$B$N%m!<e(B
e$B%I$G$Oe(Bmemcmp 0e$B$K$J$k$N$K!"e(Birbe$BC1FH$G5/F0$7$F$+$ie(Brequire ‘hoge.rb’ e$B$H$9$ke(B
e$B$H$J$<LdBj$J$$$N$+$,2r$;$^$;$s!#e(B

[email protected]$H$b$H$b$He(Bargce$B$,e(B2e$B$J$N$KBP$7$F!“e(B-rhoge.rbe$B$,2C$o$l$Pe(B3e$B$Ke(B
e$B$J$k$O$:$G$9$,!”$=$l$,4X78$7$F$$$k$N$+$b$7$l$^$;$s!#e(B

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs