
RunSwift: Try Swift in Your Browser - jparishy
http://www.runswiftlang.com/
======
jparishy
Hi! I made RunSwift this past week and thought it was pretty neat so I wanted
to share it. Have fun!

~~~
aupajo
I've always wondered how these are made. Does it run in some kind of
virtualised container?

~~~
jparishy
That's one way to do it, sure. In this case I had the problem of having to use
a Mac for a build server, though.

I did a few things to get this running:

\- The application server and build server are separate, with access control
to the build server controlled by an API key that I can revoke should anyone
gain access to it.

\- The process that compiles and runs your code is an unprivileged user.

\- All import statements are disabled in user submitted code

\- Foundation is imported selectively with only a few classes allowed to be
used by submitted code (namely, the NSString, NSArray, NSDictionary, etc APIs)

\- Code is checked for a list of blacklisted APIs before hitting the compiler

\- The execution of your code has a timeout of a few seconds, and the process
will be killed should it take any longer.

I looked into more advanced techniques for sandboxing but couldn't find
anything on OS X that was feasible. Happy to be schooled on security though,
if you know better than I do :)

~~~
jhammer
You can execute the process under sandbox-exec to take advantage of OS X
kernel-level sandboxing. You'll need to write your own profile file that
allows/denys what you want. There are plenty of examples of these .sb profile
files under /System/Library. More:
[https://developer.apple.com/library/mac/documentation/Darwin...](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/sandbox-
exec.1.html)

~~~
jparishy
Excellent! Thank you for pointing me to this!

~~~
lstamour
Good tip. Another suggestion would be to use chroot :)

That said, the best, most foolproof way of doing this really comes down to
using OS X to virtualize OS X.

Or you could try cross-compiling. It seems to work here:
[https://github.com/swift-x/tools](https://github.com/swift-x/tools) (which
looks interesting...)

It's possible that by the end of this week, maybe next, it will be very easy
indeed to compile and/or run Swift on Linux from Linux, at which point you
could try LXC or a million other ways to virtualize.

~~~
jparishy
Thanks for the tips! I'd love to move to LXC should an appropriate/feasible
compiling solution become available :)

------
bezalmighty
Nice work! I've been looking at using the REPL to make some web stuff too, so
I understand the challenges involved here!

BTW we are running a Swift hackathon @ GitHub HQ in a few weeks, it would be
cool if you could join us:
[http://www.swifthack.splashthat.com](http://www.swifthack.splashthat.com)

~~~
jparishy
Thanks! What kind of web stuff stuff are you trying to do?

And I would love to, but unfortunately I live on the other (better ;)) coast!
Will you all be taping the talks?

------
arturventura
I dabbled with implementing Swift on JavaScript, but has proven a bit
difficult. The grammar is very big and just implementing a parser is huge task
on its own.

I would like to see someone tackle this though.

~~~
xiaoma
It will happen.
[http://www.reddit.com/r/atwoodslaw/](http://www.reddit.com/r/atwoodslaw/)

------
general_failure
If I hit compile I get "gtimeout: failed to run command
‘/Applications/Xcode6-Beta4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift’:
No such file or directory"

~~~
general_failure
Error now changed to "233168 sh:
/var/folders/mq/sxspn0v179z03ljffqzb7vk00000gn/T/./run-swift.IBiDbHOX:
Operation not permitted"

~~~
jparishy
Debugging an issue with the runner now, but the output should still show above
the error. It'll be fixed soon!

 __Edit: Rolled back my changes; I 'll sort them out when the server is a
little busy :) Happy Saturday!

