在考虑到电脑操作系统的承继安全系数的情况下,有一个经常被忽略了的问题(这到合乎微软公司的口感):假如你为Windows平台程序编写,那麼你的系统就只能在不足的电脑操作系统、版本和补丁包层上运作。
而UNIX和Linux则反过来,他们包含许多对外开放源码、商业服务,及其政府部门开发设计的版本,并且应用程序经常跨许多不一样服务平台随意公布,而这类服务平台都是有非常不一样的安全性特性。
因为有一些阅读者只在Windows上工作中,因此在这里要介绍一下*nix。UNIX和Linux的区划取决于其核心及其客户室内空间上。大部分程序流程都能够在使用者室内空间里的核心以上运作。刚触碰Linux的程序猿,尤其是有工作经验的UNIX开发人员,有时没法观念Linux并不只是是完全免费版本的UNIX;实际上,二者确实存有一些非常大的不同点。从安全性的视角讲,大部分版本Linux都十分类似,由于两者都根据同样的核心和C库。一个明显的不同点是,Linux对按需动态性载入内核模块给予了专业的适用。
除开UNIX和Linux以上的不同点,不一样版本的UNIX中间也具有较大的安全性区别。针对转至UNIX的Linux开发人员而言,这种区别不太显著,可是很重要。例如,有一些和UNIX相近的电脑操作系统会开展强制性的密钥管理,而有的则不容易。
还有一个密切有关的服务平台:Free Software HURD宏核心的*nix,它有自身的安全性特性。
有一些UNIX服务平台,在其中最明显的是OpenBSD,在开展缺省安裝的过程中自身就需要比其他的电脑操作系统更为安全性;假如为他们所作的应用程序还会继续运作在其它一些版本的UNIX系统软件上,那麼这种应用程序依然必须完成他们自身的安全性特性,并遵循一些好的程序编写国际惯例。
针对开发人员来讲,了解进程和进程是特别关键的。在UNIX的组合里,进程经常会被独立解决,而实行则由系统软件来方案分配。而在Linux里,进程和进程实际上沒有差别。在UNIX里,同一个进程里的进程会共享内存,可是Linux的进程会建立此外的进程,并可以界定什么自然资源可以被共享资源,而什么不可以。Linux的开发人员经常会使用“每日任务(task)”这个词,而她们实际上是在讨论进程。为了更好地以最安全可靠的形式让应用程序可以被移殖,开发人员应当坚持不懈应用规范的进程库。
尤其的,假如你期待应用程序可以被移殖,那麼就需要应用“fork”启用来建立新的进程。要留意,假如有可能得话要持续应用fork,这一点很重要。不必应用“vfork”,它是由BSD开发设计的一个提升版本的fork(因而被普遍应用),并且出自于兼容模式的考虑到,也被引进了Linux。其缘故非常简单:vfork会让子进程共享资源(或是更确切地说,接手)父进程的存储空间和控制,这会造成子进程和父进程中间的互相矛盾。在有一些版本的Linux里,vfork在特殊状况下能被网络黑客攻克。
虽然Windows有那样或是那般显著的和知名的问题,从某些方面上讲,微软公司的开发人员完成程序编写安全性要比较非常容易一些,由于它们所作业平台的多元性遭受了限定。
UNIX和Linux的开发人员,尤其是混合开发的开发人员,很有可能对安全性具备非常的敏感度,由于两者的电脑操作系统很有可能在缺省的情况下就更为安全性;可是,不一样版本的UNIX中间在安全性上面有许多的不一样,其区别乃至要比UNIX和Linux中间的还需要大。他们中间诸多的同样特性经常遮盖掉了这种区别,而可扩展性的原因则加重了这种区别。沒有哪个Windows下的C或是VBASIC程序猿,会以为他的或是她的应用程序会一成不变的只运作在UNIX服务平台上,或是反过来;可是在UNIX/Linux社区内部结构,要记牢,因为应用程序很有可能会运作在不一样的网络平台上,因此它很有可能没法运作在同样的安全等级上,这一点很重要。