Changeset - 8899d0d08d22
[Not reviewed]
0 3 0
Bradley Kuhn (bkuhn) - 8 years ago 2015-11-29 20:00:02
bkuhn@ebb.org
Change title of page to reflect Copyleft generally
3 files changed with 4 insertions and 4 deletions:
0 comments (0 inline, 0 general)
www/conservancy/static/copyleft-compliance/about.html
Show inline comments
 
{% extends "base_compliance.html" %}
 
{% block subtitle %}GPL Compliance Project For Linux Developers - {% endblock %}
 
{% block subtitle %}Copyleft Compliance Projects - {% endblock %}
 
{% block submenuselection %}AboutCompliance{% endblock %}
 
{% block content %}
 
<h1>GPL Compliance Project for Linux Developers</h1>
 
<h1>Conservancy's Copyleft Compliance Projects</h1>
 

	
 
<p>The GPL Compliance Project for Linux Developers is comprised of copyright
 
holders in the kernel, Linux, who have contributed to Linux under its
 
license, <a href="http://www.gnu.org/licenses/gpl-2.0.html">the
 
GPLv2</a>. These copyright holders have formally asked Conservancy to engage
 
in compliance efforts for their copyrights in the Linux kernel.</p>
 

	
 
<p>Historically, Conservancy was well-known for its ongoing license
 
compliance efforts on behalf of its BusyBox member project.  In May
 
2012, <a href="https://sfconservancy.org/news/2012/may/29/compliance/">Conservancy
 
announced a coordinated compliance effort</a> on behalf of its BusyBox and
 
Samba projects, and also launched this unique project, called the <cite>GPL
 
Compliance Project for Linux Developers</cite>, which handles compliance and
 
enforcement activities on behalf of more than a dozen Linux copyright
 
holders.</p>
 
 
 
<p>Conservancy's GPL Compliance Project is run in a collaborative manner with
 
the project developers.  All copyright holders involved have the opportunity
 
to give input and guidance on Conservancy's strategy in dealing with
 
compliance issues.  Thus, all Conservancy's compliance matter have full
 
support of relevant copyright holders.</p>
 

	
 
<p>Conservancy is dedicated to encouraging all users of software to comply
 
  with Free Software licenses. Toward this goal, in its compliance efforts,
 
  Conservancy helps distributors of Free Software in a friendly spirit of
 
  cooperation and participation.  In this spirit, Conservancy also sponsors
 
  the <a href="https://copyleft.org/guide/"><cite>Copyleft and the GNU
 
  General Public License:A Comprehensive Tutorial and Guide</cite></a>, in
 
  collaboration with the Free Software Foundation (FSF),
 
  which <a href="/news/2014/nov/07/copyleft-org/">Conservancy formally
 
  launched in fall 2014</a>.  The Guide includes tutorial materials about
 
  copyleft and compliance with copyleft licenses,
 
  including <a href="https://copyleft.org/guide/comprehensive-gpl-guidepa2.html"><cite>A
 
  Practical Guide to GPL Compliance</cite></a>.  The materials
 
  on <a href="https://copyleft.org/">copyleft.org</a> have been developed and
 
  improved since 2002, and are themselves copylefted, and developed
 
  collaboratively in public.</p>
 

	
 
<p>However, the Guide is admittedly a large document, so for those who are
 
  interested in a short summary of describing how Conservancy handles GPL
 
  enforcement and compliance
 
  work, <a href="https://sfconservancy.org/blog/2012/feb/01/gpl-enforcement/">this
 
  blog post outlining the compliance process</a> is likely the best source.</p>
 

	
 
<p>If you are aware of a license violation or compliance issue regarding
 
  Linux, or
 
  any <a href="https://sfconservancy.org/members/current/">Conservancy member
 
  project</a> (and in particular BusyBox, Evergreen, Inkscape, Mercurial,
 
  Samba, Sugar Labs, or Wine),
 
  please <a href="mailto:compliance@sfconservancy.org">contact us by email at
 
  &lt;compliance@sfconservancy.org&gt;</a>.</p>
 

	
 
<p>Finally, Conservancy welcomes <a href="#donate-box"
 
  class="donate-now">donations</a> in support of the GPL Compliance Project
 
  for Linux Developers.  Just use the <a href="#donate-box"
 
  class="donate-now">PayPal link on this page or any of our other donation
 
  methods listed</a>.  Be sure to mention &ldquo;GPL Compliance Project for
 
  Linux Developers&rdquo; in the memo line or description field of the
 
  donation.</p>
 
</div>
 
{% endblock %}
www/conservancy/static/copyleft-compliance/vmware-lawsuit-appeal.html
Show inline comments
 
{% extends "base_compliance.html" %}
 
{% block subtitle %}GPL Compliance Project For Linux Developers - {% endblock %}
 
{% block subtitle %}Copyleft Compliance Projects - {% endblock %}
 
{% block submenuselection %}VMwareLawsuitAppeal{% endblock %}
 
{% block content %}
 
<h2>The time has come to stand up for the GPL.</h2>
 

	
 
<p><em>Last month, Conservancy <a href="/news/2015/mar/05/vmware-lawsuit/">announced Christoph Hellwig's
 
    lawsuit against VMware in Germany</a>.  Help us meet our anonymous match to 
 
    support Conservancy's and Christoph's efforts in this area
 
    by <a href="https://sfconservancy.org/supporter/">becoming a Conservancy
 
    supporter</a> or <a href="#donate-box" class="donate-now">donating via
 
    the link on the right</a>.</em></p>
 

	
 

	
 
<p>We were told to ask nicely and repeatedly, so we did.</p>
 

	
 
<p>We asked allies to help us make contact in friendly and professional
 
  ways.</p>
 

	
 
<p>Everyone asked us to give companies as many chances as possible and as
 
  much help as possible to comply with copyleft, so we did.</p>
 

	
 
<p>We've worked for years to help VMware comply with the GPL, but they
 
refuse. Negotiations broke down for the last time when they insisted on an 
 
NDA just to discuss settlement terms!</p>
 

	
 
<p>Christoph is among the most active developers of Linux.  As of Feburary 
 
19, 2015, Christoph has contributed 279,653 lines of code to the Linux kernel, 
 
and ranks 20th among the 1,340 developers involved in the latest 3.19 kernel 
 
release.  Christoph also
 
ranks 4th among those who have reviewed third-party source code, tirelessly
 
corrected and commented on other developers' contributions.  Christoph
 
licenses his code to the public under the terms of the GPL for practical and
 
ideological reasons.  VMware, a company with net revenue of over $1 billion
 
and over 14,000 employees, ignored Christoph's choice.  They took Christoph's
 
code from Linux and modified it to work with their own kernel without releasing
 
source code of the resulting complete work.  This is precisely the kind of
 
activity Christoph and other kernel developers seek to prevent by choosing
 
the GPL.  The GPL was written to prevent this specific scenario!</p>
 

	
 
<h3>This is a matter of principle.</h3>
 

	
 
<p>Free and open source software is everywhere and in everything; yet our
 
  software freedom is constantly eroded.</p>
 

	
 
<p>We want companies to incorporate our software into new products, but there
 
are a few simple rules.  Copylefted free software is so prevalent because
 
there's no way a company can compete without using a significant amount of
 
free software to bring products to market in reasonable time. They get so
 
much benefit from our work.  Allowing the whole community to review, use,
 
improve and work with the code seems very little to ask in return.  Copyleft
 
also ensures competitors cannot undercut those who contribute.  Without active enforcement, the GPL is
 
effectively no different from a non-copyleft license.</p>
 

	
 
<p>What point is there for companies to make sure that they're compliant if
 
there are no consequences when the GPL is violated? Many will continue to
 
ignore the rules without enforcement.  We know that there are so many
 
companies that willingly comply and embrace GPL as part of their business.
 
Some are temporarily out of compliance and need to be brought up to speed,
 
but willingly comply once they realize there is an issue.  Sadly, VMware sits
 
in the rare but infamous class of perpetually non-compliant companies. VMware
 
has been aware of their noncompliance for years but actively refuses to do
 
the right thing.  Help us do right by those who take the code in the spirit
 
it was given and comply with copyleft, and stop those don't.</p>
 

	
 
<p>We know that copyleft isn't a favorite licensing strategy for some in our
 
community.  Even so, this case will help bring clarity on the question of
 
combined and derivative works, and is essential to the future of all software
 
freedom.  This case deserves support from copyleft and non-copyleft free
 
software communities alike.</p>
 

	
 
<h3>Show you care</h3>
 

	
 
<p>Bad actors have become complacent because they think you don't care.  A
 
  strong show of public support for Conservancy and Christoph's position will
 
  help our legal case and demonstrate the interpretive context for it.
 
  Please <a href="#donate-box" class="donate-now">donate</a> to our campaign to enforce the GPL.  Help Conservancy
 
  increase its number of individual donors, so we have clear evidence to show
 
  bad actors that the GPL matters to the individuals in our community.
 
  After you <a href="#donate-box" class="donate-now">donate</a>, go and tell the world: &ldquo;Play by the rules, @VMware. I defend the #GPL with Christoph &amp; @Conservancy. #DTRTvmware  Help at https://sfconservancy.org/supporter/ &rdquo; on your blog or microblog.
 
  </p>
 

	
 

	
 
<h3>Isn't the combined works and/or derivative works question a legal grey area?</h3>
 

	
 
<p>We don't think so, but this case will let the court to decide that question.
 
Either way, it's beneficial to our entire community to find out what the
 
judges think.  (Check out our <a href="/linux-compliance/vmware-lawsuit-faq.html">FAQ to find out more
 
information</a>.)</p>
 

	
 
<p>Help us pay for this expensive lawsuit and to generally defend software
 
  freedom and the GPL.  Help us show the world that copyleft matters.  We are excited 
 
  to announce that we already reached an anonymous match for this campaign, where every dollar donated 
 
  was matched up to $50,000. However, that $100,000 is just an initial step
 
  and there is so much GPL enforcement work to do.  So, please
 
  donate now: by becoming <a href="/supporter/">a Conservancy Supporter</a> or
 
  via <a href="#donate-box" class="donate-now">donate link on the right</a>.</p>
 

	
 
<h3>Want To Know More?</h3>
 

	
 
<p>Watch the video below of Conservancy Executive Director, Karen Sandler,
 
  <a href="/news/2015/mar/31/libreplanet/">delivering a keynote on this topic
 
  at
 
    LibrePlanet 2015</a>:</p>
 
<p>
 
 <video controls
 
         preload="auto" class="video-js vjs-default-skin"
 
         data-setup='{"height": 276,
 
                      "width": 640 }'>
 
    <source src="http://media.libreplanet.org/mgoblin_media/media_entries/96/karen-compressed-trimmed-good.medium.webm"
 

	
 
              type="video/webm; codecs=&#34;vp8, vorbis&#34;"
 
             />
 
   
 
 </video>
 
</p>
 

	
 
<p>Or, read <a href="/linux-compliance/vmware-lawsuit-faq.html">our FAQ about
 
    the lawsuit</a>.</p>
 

	
 
{% endblock %}
www/conservancy/static/copyleft-compliance/vmware-lawsuit-faq.html
Show inline comments
 
{% extends "base_compliance.html" %}
 
{% block subtitle %}GPL Compliance Project For Linux Developers - {% endblock %}
 
{% block subtitle %}Copyleft Compliance Projects - {% endblock %}
 
{% block submenuselection %}VMwareLawsuitFAQ{% endblock %}
 
{% block content %}
 
<h1>Frequently Asked Questions about Christoph Hellwig's VMware Lawsuit</h1>
 

	
 
<p>Conservancy maintains this
 
  <abbr title="Frequently Asked Questions">FAQ</abbr> list regarding
 
  <a href="/news/2015/mar/05/vmware-lawsuit/">Christoph Hellwig's lawsuit against VMware
 
  in Germany over alleged GPL violations on Linux</a> as a service to the
 
  Free Software community, and in particular, the copyleft community.  Conservancy
 
  realizes this lawsuit generates many questions and interest
 
  from the community.  Legal counsel (both Conservancy's own, and
 
  Christoph's lawyer, Till Jaeger) correctly advise us to limit our public
 
  comments regarding specific details of the case while litigation remains
 
  pending in court.  Nevertheless, Conservancy, as a
 
  non-profit charity serving the public good, seeks to be as transparent as
 
  possible.  If you have additional questions you'd like to see answered
 
  here, please <a href="mailto:info@sfconservancy.org">email
 
  &lt;info@sfconservancy.org&gt;</a>, but understand that we may often need
 
  to answer: <q>We cannot comment on this while litigation is pending</q>.</p>
 

	
 
<dl>
 
  <dt>Who is the Plaintiff in the lawsuit?</dt>
 

	
 
  <dd>Christoph is one of most active developers of the Linux kernel. He has
 
   contributed 279,653 lines of code to the latest Linux 3.19 kernel, and
 
   thus ranks 20th among the 1,340 developers involved in that release.
 
   Christoph also ranks 4th among those who have reviewed third-party source
 
   code, and he has tirelessly corrected and commented on other developers'
 
   contributions.</dd>
 

	
 
  <dt id="court-documents">Are the court documents released?</dt>
 

	
 
  <dd>Not currently.  Court proceedings are not public by default in Germany
 
  (unlike in the USA).  Conservancy will continue to update this FAQ with
 
  information that Conservancy knows about the case.  We would all also
 
  welcome an agreement with VMware whereby both sides would agree to publish
 
  all Court documents. </dd>
 

	
 
  <dt>Who's funding this lawsuit?</dt>
 

	
 
  <dd>Conservancy has engaged in a grant agreement with Christoph Hellwig for
 
  the purposes of pursuing this specific legal action in Germany.
 
  Conservancy is funding this legal action specifically as part of
 
  Conservancy's program activity in
 
  its <a href="/linux-compliance/about.html">GPL Compliance
 
  Project for Linux Developers</a>.</dd>
 

	
 
  <dt>Is this the Great Test Case of Combined / Derivative Works?</dt>
 

	
 
  <dd>This case is specifically regarding a combined work that VMware
 
  allegedly created by combining their own code (&ldquo;vmkernel&rdquo;) with
 
  portions of Linux's code, which was licensed only under GPLv2.  As such,
 
  this, to our knowledge, marks the first time an enforcement case is
 
  exclusively focused on this type of legal question relating to GPL.
 
  However, there are so many different ways to make combined and/or
 
  derivative works that are covered by GPL that no single case could possibly
 
  include all such issues. </dd>
 

	
 
  <dt>Why must you file a lawsuit?  Isn't there any other way to convince
 
    VMware to comply with GPL?</dt>
 

	
 
  <dd><p>Neither Conservancy nor Christoph takes this action lightly nor without
 
  exhausting every other possible alternative first.  This lawsuit is the
 
    outgrowth of years of effort to convince VMware to comply with GPL.</p>
 

	
 
    <p>In October 2011, Conservancy received a GPL violation report on
 
  BusyBox for VMware's ESXi products.  Conservancy opened the matter in its
 
  usual, friendly, and non-confrontational way.  Nevertheless, VMware
 
  immediately referred Conservancy to VMware's outside legal counsel in the
 
  USA, and Conservancy negotiated with VMware's legal counsel throughout
 
  late 2011, 2012 and 2013.  We exchanged and reviewed
 
  <a title="Complete, Corresponding Source" href="https://copyleft.org/guide/comprehensive-gpl-guidech6.html#x9-470005.2.1">CCS</a> candidates, and
 
  admittedly, VMware made substantial and good efforts toward compliance on
 
  BusyBox.  However, VMware still refused to fix a few minor and one major
 
  compliance problem that we discovered during the process.  Namely, there
 
  was a major violation regarding Linux itself that ultimately became
 
  Christoph's key complaint in this lawsuit.</p>
 

	
 
 <p>Meanwhile, when Conservancy realized in late 2012 there might be a major
 
 Linux violation still present in VMware's ESXi products, Conservancy
 
 representatives sought every industry contact we had for assistance,
 
 including those from trade associations, companies (both competitors and
 
 collaborators with VMware), and everyone else we could think of who might be
 
 able to help us proceed with friendly negotiations that would achieve
 
 compliance.  While we cannot name publicly the people we asked for help
 
 to convince VMware to comply, they include some of the most notable
 
 executives, diplomats, and engineering managers in the Linux community.  No
 
 one was able to assist Conservancy in convincing VMware to comply with the
 
 GPL.  Then, in early 2014, VMware's outside legal counsel in the USA finally
 
 took a clear and hard line with Conservancy stating that they would not
 
 comply with the GPL on Linux and argued (in our view, incorrectly) that they
 
 were already in compliance.</p>
 

	
 
 <p>Conservancy in parallel informed Christoph fully of the details of the
 
   Linux violation on Christoph's copyrights, and based on Conservancy's
 
   findings, Christoph began his own investigation and confirmed
 
   Conservancy's compliance conclusions.  Christoph then began his own
 
   enforcement effort with legal representation from Till Jaeger.  Christoph has
 
   been unable to achieve compliance, either, through his negotiations in
 
   2014.  VMware's last offer was a proposal for a settlement agreement that VMware would
 
   only provide if Christoph signed an NDA, and Christoph chose (quite
 
   reasonably) not to sign an NDA merely to look at the settlement offer.</p>
 

	
 
 <p>Thus, this lawsuit comes after years of negotiations by Conservancy to
 
 achieve compliance &mdash; negotiations that ended in an outright refusal by
 
 VMware's lawyers to comply.  Those events were then followed by a year of
 
   work by Christoph and Till to achieve compliance in a separate action.</p>
 

	
 
 <p>Simply put, Conservancy and Christoph fully exhausted every possible
 
 non-litigation strategy and tactic to convince VMware to do the right thing
 
 before filing this litigation.</p>
 
  </dd>    
 

	
 
  <dt>Can you explain further how VMware incorporated code from Linux into
 
  their kernel?</dt>
 

	
 
  <dd>
 
  <p id="diagram">
 
    Conservancy prepared this diagram to show the technical situation as we
 
    understand it.  The diagram compares the technical architecture of a full,
 
    running Linux kernel with a full, running VMware kernel:
 
    <p>
 
      <a href="/linux-compliance/linux-vs-vmkernel_en.png">
 
    <img class="inside-faq" alt="[Diagram of Linux and VMware running kernels]" src="/linux-compliance/linux-vs-vmkernel_en_scaled.png" /></a>
 
    </p>
 

	
 
    <p>If you want to download the diagram, it's available
 
    in <a href="/linux-compliance/linux-vs-vmkernel_en.svg">SVG
 
    (English)</a>, <a href="/linux-compliance/linux-vs-vmkernel_en.png">PNG
 
    (English)</a>, <a href="/linux-compliance/linux-vs-vmkernel_de.svg">SVG
 
    (German)</a>, and <a href="/linux-compliance/linux-vs-vmkernel_de.png">PNG
 
    (German)</a>.</p>
 
  </dd>
 

	
 
  <dt>Can you explain further in words (rather than a picture) about the central
 
  component in ESXi that the lawsuit alleges violates the GPL?</dt>
 
<dd>
 
    <p>The GPL violation at issue involves VMware's ESXi product.
 
    Conservancy independently reviewed ESXi 5.5 and its incomplete
 
      <abbr title="complete, corresponding source">CCS</abbr>
 
    release as part of our GPL enforcement efforts described above.</p>
 

	
 
    <p>Conservancy's preliminary investigation indicated that the operating
 
    system kernel of VMware ESXi product consists of three key components:
 
        <ul>
 
          <li> the proprietary component &ldquo;vmkernel&rdquo;, which is
 
            released in binary form only,</li>
 
            <li>the kernel module &ldquo;vmklinux&rdquo;, which contains modified Linux
 
Code, and for which (at least some) source code is provided.
 
            <li>other kernel modules with device drivers, most of which are
 
            modified Linux drivers, and for which (at least some) source code
 
              is provided.</li>
 
        </ul>
 

	
 
    <p>Conservancy examined the incomplete CCS alongside the
 
           binary &ldquo;vmkernel&rdquo; component.  Such examination indicates that functions
 
           in &ldquo;vmkernel&rdquo; do make function calls to Linux's kernel code
 
      in the usual way for a single program written in C.</p></dd>
 

	
 
    <dt>Doesn't VMware's &ldquo;shim layer&rdquo; insulate them from GPL
 
    obligations and allow them to keep certain code in their kernel
 
    proprietary?</dt>
 

	
 
    <dd>
 
    <p>Many in the media have talked about the possibility that VMware might
 
    use some so-called &ldquo;shim layer&rdquo; between Linux code and
 
    VMware's proprietary code.  While, for decades, there has been much talk of
 
    various mechanisms of GPL obligation avoidance, Conservancy believes that
 
    merely modifying technical details of a combination's construction
 
    does not typically influence the legal analysis in a combined or
 
    derivative work scenario.</p>
 

	
 
    <p>Furthermore, the technical details of VMware's alleged GPL violation
 
    do not even mirror the typical scenarios that have usually been called
 
    &ldquo;shim layers&rdquo;.  Conservancy's analysis of VMware's ESXi
 
    product, in fact, indicates that VMware rather flagrantly combined Linux
 
    code in their own kernel, and evidence seems to indicate the work as a
 
    whole was developed by modifying Linux code in tandem with
 
    modifications to &ldquo;vmkernel&rdquo; in a tightly coupled manner.</p>
 
    </dd>
 
   <dt id="shim-meaningless">Is Conservancy proposing a &ldquo;shim
 
      layer&rdquo; as a viable solution for GPL compliance?</dt>
 

	
 
    <dd>No, in fact, as we say above, Conservancy doesn't think the phrase
 
        &ldquo;shim layer&rdquo; has any meaning, despite regular use of that
 
        phrase in the media.  Conservancy generally doubts there is any
 
        technological manipulation that changes the outcome of a
 
        combined/derivative work analysis.</dd>
 

	
 
    <dt id="example">Can you give a <em>specific</em> example, with code, showing how
 
    VMware combined Linux source code with their binary-only components?</dt>
 

	
 
     <dd><p>There are numerous examples available that show this.  The
 
       details of alleged infringement specifically relating to Hellwig's
 
       contributions to Linux are of course the main matter of the
 
       allegations in the litigation, and Conservancy
 
       released <a href="#diagram">the diagram above</a> to exemplify that
 
       issue.  Conservancy continues to <a href="#court-documents">hope VMware will
 
       agree to make public all court documents</a> as a matter of public
 
       good, since the court documents discuss the specifics of alleged
 
         infringement on Hellwig's copyrights.</p>
 

	
 
       <p>However, Conservancy examined VMware's ESXi 5.5 product in detail
 
       even before Hellwig's enforcement action began.  Below is one example
 
       among many where VMware's CCS was incomplete per GPLv2&sect;2(c) and
 
       GPLv2&sect;3(a).  (One can verify these results by
 
       <a href="#verify">downloading and installing the binary and source
 
       packages for VMware's ESXi 5.5 Update 2</a>.)  Note that this
 
       example below is not necessarily regarding
 
       Hellwig's copyrights; VMware incorporated Linux code copyrighted by
 
       many others as well into their kernel.</p>
 

	
 
       <h3>Example of &ldquo;vmkernel&rdquo;'s combination with Linux code</h3>
 
       <p>Our example begins with examination of the file
 
           called <code>vmkdrivers/src_92/vmklinux_92/vmware/linux_pci.c</code>,
 
           which can be found in the &ldquo;Open Source&rdquo; release for
 
           ESXi 5.5.0 Update 2 (5.5U2).  A small excerpt from that file, found in the
 
           function <code>LinuxPCIDeviceRemoved()</code>, reads as follows:</p>
 

	
 
<pre>
 
#include &lt;linux/pci.h&gt;
 
[...]
 
/*
 
 * This function [...] is modelled after pci_remove_device, the function which would
 
 * be called in a linux system.
 
 */
 
static void
 
LinuxPCIDeviceRemoved(vmk_PCIDevice vmkDev)
 
{
 
   LinuxPCIDevExt *pciDevExt;
 
   struct pci_dev *linuxDev;
 
[...]
 
  if (unlikely(
 
    vmk_PCIGetDeviceName(vmkDev, vmkDevName, sizeof(vmkDevName)-1) != VMK_OK))
 
  {
 
      vmkDevName[0] = 0;
 
  }
 
[...]
 
VMKAPI_MODULE_CALL_VOID(pciDevExt->moduleID,
 
                        linuxDev->driver->remove,
 
                        linuxDev);
 
</pre>        
 

	
 
<h4>Combination of &ldquo;vmkernel&rdquo; code with &ldquo;vmkdrivers&rdquo;</h4>
 

	
 
<p>The function, <code>vmk_PCIGetDeviceName()</code> must be defined, with an
 
      implementation, for this code above to work, or even compile.
 
      Inside <code>BLD/build/HEADERS/vmkapi-current-all-public/vmkernel64/release/device/vmkapi_pci_incompat.h</code>,
 
      found in the <code>vmkdrivers</code> package of ESXi 5.5U2, shows a
 
      function header definition for <code>vmk_PCIGetDeviceName()</code>.
 
      However, the source of its implementation is not provided there or
 
      anywhere in the source release.</p>
 

	
 
<p>Further evidence that the implementation of this function occurs elsewhere
 
  can by found by running <code>objdump -x</code> on the un-vmtar'ed
 
  <code>vmklinux_9</code> module.  Note the following output in the &ldquo;SYMBOL
 
  TABLE&rdquo; section:</p>
 

	
 
<pre>
 
0000000000000000         *UND*  0000000000000000 vmk_PCIGetDeviceName
 
</pre>
 

	
 
<p>
 
&hellip;and the following lines found in the  &ldquo;RELOCATION RECORDS FOR
 
[.text]&rdquo; section:
 
</p>
 

	
 
<pre>
 
00000000000327ff R_X86_64_PC32     vmk_PCIGetDeviceName+0xfffffffffffffffc
 
0000000000035318 R_X86_64_PC32     vmk_PCIGetDeviceName+0xfffffffffffffffc
 
00000000000387e1 R_X86_64_PC32     vmk_PCIGetDeviceName+0xfffffffffffffffc
 
000000000003cf40 R_X86_64_PC32     vmk_PCIGetDeviceName+0xfffffffffffffffc
 
</pre>
 

	
 
<p>The above two properties both suggest that the <code>vmklinux_9</code>
 
 module requires: (a) a definition of the <code>vmk_PCIGetDeviceName()</code>
 
 function to operate, but (b) that function is not defined
 
 inside <code>vmklinux_9</code> itself.</p>
 

	
 
<p>The definition can however be found in binary-only software provided in
 
  ESXi 5.5U2 &mdash; specifically, inside a file named <code>k.b00</code>,
 
  which is located in partition 5 on a disk where ESXi has been installed (or
 
  in the ESXi 5.5U2 installer ISO image).  Running <code>file</code>
 
  after <code>gunzip</code> on this file yields &ldquo;ELF 64-bit LSB shared
 
  object&rdquo;.  Meanwhile, <code>file k.b00</code> reports &ldquo;gzip
 
  compressed data, was &lsquo;vmvisor64-vmkernel.stripped&rsquo;&rdquo;.
 
  These findings strongly suggests this is an image of the
 
  &ldquo;vmkernel&rdquo; component.  An <code>objdump -x</code> yields this
 
  &ldquo;SYMBOL TABLE&rdquo; section:</p>
 

	
 
<pre>
 
000041800036a408 g     F .text  0000000000000137 vmk_PCIGetDeviceName
 
</pre>
 

	
 
<p>&hellip; which indicated these binary file contains the function body
 
for  <code>vmk_PCIGetDeviceName</code>.</p>
 

	
 
<p>Furthermore, after detailed searching, Conservancy found no evidence that any
 
  other code (other than modified Linux code) makes calls
 
  to <code>vmk_PCIGetDeviceName</code>.  This provides a strong indication
 
  that this function's primary purpose is to combine Linux code with
 
  &ldquo;vmkernel&rdquo;.  Conservancy also found other functions where similar analysis
 
  yields similar results as above.</p>
 

	
 
<h4>Linux's <code>struct pci</code> combined with <code>LinuxPCIDeviceRemoved()</code></h4>
 

	
 
<p>Having established the direct and close combination
 
  of <code>vmk_PCIGetDeviceName</code>
 
  and <code>LinuxPCIDeviceRemoved()</code>,  focus now on the
 
  quoted code from <code>LinuxPCIDeviceRemoved()</code>.  That code, note
 
  that one of the local variables is <code>struct pci_dev *linuxDev;</code>.
 
  A definition of <code>pci_dev</code> is found in
 
  <code>vmkdrivers/src_92/include/linux/pci.h</code> (which
 
  is <code>#include</code>'d above) reads:</p>
 

	
 
  <pre>
 
struct pci_dev {
 
[...]
 
       struct pci_driver *driver;      /* which driver has allocated this device */
 
[...]
 
truct pci_driver {
 
        char *name;
 
[...]
 
        void (*remove) (struct pci_dev *dev);   /* Device removed (NULL if not a hot-plug capable driver) */
 
[...]
 
#if defined(__VMKLNX__)
 
        /* 2008: Update from Linux source */
 
        u8              revision;       /* PCI revision, low byte of class word */
 
#endif /* defined(__VMKLNX__) */
 
  };
 
</pre>
 

	
 
<p>These structures, and based on those from Linux itself
 
  (<a href="http://lxr.free-electrons.com/source/include/linux/pci.h?v=2.6.24">a
 
    similar version of this file can be seen in Linux 2.6.24</a>), and as can
 
  be seen above, have been modified to work with &ldquo;vmkernel&rdquo;</p>
 

	
 
<p>In <code>LinuxPCIDeviceRemoved()</code>, we saw a macro called with a
 
  variable, <code>linuxDev</code> which was of type <code>struct pci</code>.
 
  Thus, the combination of code from Linux's <code>pci.h</code>
 
  and VMware's <code>vmware/linux_pci.c</code> is very tightly coupled and
 
  interdependent.</p>
 

	
 
<h4><code>VMKAPI_MODULE_CALL_VOID</code> macro calls driver's code</h4>
 

	
 
<p>The
 
  file <code>BLD/build/HEADERS/vmkapi-current-all-public/vmkernel64/release/base/vmkapi_module.h</code>
 
  contains the macro definition of  <code>VMKAPI_MODULE_CALL_VOID</code>,
 
  which is quoted below (with debug lines removed):
 
<pre>
 
#define VMKAPI_MODULE_CALL_VOID(moduleID, function, args...)  \
 
do {                                                    \
 
    vmk_ModInfoStack modStack;                          \
 
    vmk_ModulePushId(moduleID, function, &amp;modStack);    \
 
    (function)(args);                                   \
 
    )                                                   \
 
    vmk_ModulePopId();                                  \
 
} while(0)
 
</pre>
 

	
 
<p>When the macro is expanded, it means that <code>(function)(args)</code> is
 
  actually expanded to <code>linuxDev->driver->remove(linuxDev)</code>.
 
  Therefore, we see <code>LinuxPCIDeviceRemoved()</code>, makes directs calls
 
  to a driver's remove() function, by combining with Linux's <code>struct
 
  pci</code>, and by VMware's introduction of this new calling code.
 
  Conservancy has confirmed many drivers from Linux are incorporated via
 
  these mechanisms; one specific example is discussed next.</p>
 

	
 
<h4>Combination of the tg3 driver with &ldquo;vmkernel&rdquo;</h4>
 

	
 
<p>VMware includes a file <code>vmkdrivers/src_9/drivers/net/tg3/tg3.c</code>
 
  in their source release.  This file appears to be Linux's tg3 driver.  It
 
  includes a definition of the <code>struct pci_dev</code> for this device,
 
  which reads:</p>
 

	
 
<pre>
 
static struct pci_driver tg3_driver = {
 
[...]
 
        .remove         = __devexit_p(tg3_remove_one),
 
</pre>
 

	
 
<p>Therefore, when the code in <code>LinuxPCIDeviceRemoved()</code>
 
  calls <code>linuxDev->driver->remove(linuxDev)</code>, the code ultimately
 
  called (in the case where a tg3 card is driven by the kernel)
0 comments (0 inline, 0 general)