什么是沙盒?
我已经阅读了维基百科的文章 ,但是我不确定它是什么意思,以及它与版本控制有多相似。
如果有人能够用非常简单的术语来解释什么是沙箱,那将会很有帮助。
沙坑或沙箱是一个低矮,宽阔的容器或浅的凹陷,里面充满了沙子,孩子们可以玩耍。 许多有孩子的房主在他们的后院build造沙坑,因为与许多游乐场设备不同,他们可以很容易和便宜地build造。 “沙坑”也可以表示露天矿砂矿。
那么,一个软件沙箱没有什么不同,一个沙箱为孩子打造。 通过给孩子提供一个沙箱,我们可以模拟真实游戏场所的环境(换句话说就是一个isolated environment
),但却限制了孩子能做什么。 因为我们不希望孩子受到感染,或者我们不希望他给别人造成麻烦。 :)原因是什么,我们只是想限制孩子可以为Security Reasons
做什么。
现在来到我们的软件沙箱,我们让任何软件(孩子)执行(播放),但是对他(他)能做的事情有一些限制。 我们可以感觉到执行软件可以执行的安全性和安全性 。
你已经看过&使用防病毒软件。 对? 这也是一种沙箱。 它限制了任何程序可以做的事情。 当检测到恶意活动时,它会停止并通知用户“此应用程序试图访问所以资源,是否允许?”。
下载一个名为sandboxie的程序,你可以得到一个沙盒的经验。 使用这个程序,你可以在受控环境中运行任何程序。
红色箭头表示从正在运行的程序stream入计算机的变化。 标有硬盘(无沙箱)的框显示正常运行的程序的更改。 标有硬盘(带有沙箱)的框显示了在Sandboxie下运行的程序所做的更改。 该animation表明,Sandboxie能够拦截这些变化,并将其隔离在一个沙箱内,如黄色矩形所示。 它还说明了将变化分组在一起可以很容易地一次性删除所有变更。
现在从程序员的angular度来看,沙盒限制了应用程序所允许的API。 在防病毒的例子中,我们限制了系统调用(操作系统API)。
另一个例子是在线编码领域,如topcoder。 您提交一个代码(程序),但它运行在服务器上。 为了服务器的safety
,他们应该限制程序的API访问级别。 换句话说,他们需要创build一个沙盒,并在其中运行你的程序。
如果你有一个适当的sandox,你甚至可以运行一个病毒感染的文件,并停止所有的恶意活动的病毒,并看看自己正在试图做什么。 事实上,这将是防病毒研究人员的第一步。
这个沙盒的定义基本上意味着有testing环境(开发者集成,质量保证,阶段等)。 这些testing环境模仿生产,但不共享任何生产资源。 他们有完全独立的服务器,队列,数据库和其他资源。
更常见的情况是,我见过沙箱指的就是一个虚拟机 – 隔离一台机器上的某些运行代码,这样它就不会影响到基本系统。
举一个具体的例子:假设你有一个处理汇款的应用程序。 在生产环境中,真钱交换。 在沙箱环境中,一切运行完全一样,但钱是虚拟的。 这是为了testing目的。
贝宝提供这样的沙箱环境,例如。
对于软件开发中的“沙箱”,就是要在不打扰别人的情况下进行开发。
它与版本控制不相似。 但是一些版本控制(作为分支)方法可以帮助制作沙盒。
虚拟机是sendbox的最好例子,VM是一个完整的主机,传统的操作系统可以像在实际的硬件上一样启动和运行。 来宾操作系统运行沙盒,因为它不能在主机上本地运行,只能通过模拟器访问主机资源
谷歌氯化钠可能是一个很好的例子,你可以在那里find很多很好的例子和解释。
更多的时候我们参考另一个沙箱 。
无论如何,沙箱往往意味着一个孤立的环境 。 你可以在沙箱中做任何你喜欢的事情,但是它的效果不会在沙箱外传播。 例如,在软件开发中,这意味着你不需要在/usr/lib
东西来testing你的库等等。